Java中Scanner和BufferReader类的区别
Scanner和BufferReader这两个类都用于从外部系统读取输入。当我们知道输入是字符串类型或基本类型时,通常使用Scanner;而BufferReader用于从字符流中读取文本,同时缓冲字符以实现高效的字符读取。以下是Scanner类和BufferReader类之间的一些重要区别。
序号 | 关键点 | Scanner类 | BufferReader类 |
---|---|---|---|
1 | 同步性 | Scanner本质上是非同步的,只应在单线程情况下使用。 | BufferReader本质上是同步的。在多线程环境中,应使用BufferReader。 |
2 | 缓冲内存 | Scanner具有1KB字符缓冲的小缓冲区。 | 与Scanner相比,BufferReader具有8KB字节缓冲的大缓冲区。 |
3 | 处理速度 | Scanner速度略慢,因为它还需要解析数据。 | BufferReader比Scanner快,因为它只读取字符流。 |
4 | 方法 | Scanner具有nextInt()、nextShort()等方法。 | BufferReader具有parseInt()、parseShort()等方法。 |
5 | 读取行 | Scanner具有nextLine()方法来读取一行。 | BufferReader具有readLine()方法来读取一行。 |
Scanner与BufferReader示例
JavaTester.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class JavaTester { public static void main(String args[]) throws NumberFormatException, IOException { BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter an number:"); int a = Integer.parseInt(bufferReader.readLine()); System.out.printf("You entered: " + a); Scanner scanner = new Scanner(System.in); System.out.println("\nEnter an number:"); a = scanner.nextInt(); System.out.printf("You entered: " + a); } }
输出
Enter an number: 1 You entered: 1 Enter an number: 2 You entered: 2
广告