从Scanner和输入有什么区别BufferedReader?
这是一个BufferedReader例子......
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");
// read characters
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
Run Code Online (Sandbox Code Playgroud)
这是一个Scanner例子......
Scanner scan = new Scanner(System.in);
char mrArray = new char[10];
// read characters
for (int i = 0; i < myArray.length; i++) {
String temp = myScanner.next();
myArray[i] = temp.charAt(0);
}
Run Code Online (Sandbox Code Playgroud)
这两种情况有什么区别吗?这些课程中是否有可能在未来改变?我应该BufferedStream优先使用Scanner吗?
BufferedReader是一个简单的类,用于有效地从底层流中读取.通常,由读取器(如FileReader)构成的每个读取请求都会导致对基础流进行相应的读取请求.每次调用read()或readLine()都可能导致从文件中读取字节,转换为字符,然后返回,这可能是非常低效的.如果Reader在BufferedReader中变形,效率会明显提高.
BufferedReader是同步的,因此可以安全地从多个线程完成对BufferedReader的读取操作.另一方面,扫描仪内置了更多的奶酪; 它可以完成BufferedReader可以做的所有事情,并且效率也相同.但是,另外,Scanner可以使用正则表达式解析基础流的基本类型和字符串.它还可以使用您选择的分隔符对基础流进行标记.它也可以对底层流进行前向扫描,而不考虑分隔符!然而,扫描仪不是线程安全的,它必须在外部同步.
来源:扫描仪与缓冲读取器