你的位置:首页 > 软件开发 > Java > Java中Scanner类和BufferReader类之间的区别

Java中Scanner类和BufferReader类之间的区别

发布时间:2016-08-17 11:00:21
java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串。它本质上是使用正则表达式去读取不同的数据类型。Java.io.BufferedReader类为了能够高效的读取字符序列,从字符输入流和字符缓冲区读取文本。下面是两个类的不同之处:当next ...

java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串。它本质上是使用正则表达式去读取不同的数据类型。Java.io.BufferedReader类为了能够高效的读取字符序列,从字符输入流和字符缓冲区读取文本。下面是两个类的不同之处:当nextLine()被用在nextXXX()之后,用Scanner类有什么问题尝试去猜测下面代码的输出内容;

// Code using Scanner Classimport java.util.Scanner;class Differ{   public static void main(String args[])   {     Scanner scn = new Scanner(System.in);     System.out.println("Enter an integer");     int a = scn.nextInt();     System.out.println("Enter a String");     String b = scn.nextLine();     System.out.printf("You have entered:- "         + a + " " + "and name as " + b);   }}

50Geek

Enter an integerEnter a StringYou have entered:- 50 and name as
在BufferReader类中就没有那种问题。这种问题仅仅出现在Scanner类中,由于nextXXX()方法忽略***换行符***,但是,nextLine()并不忽略它。如果我们在nextXXX()方法和nextLine()方法之间使用超过一个以上的nextLine()方法,这个问题将不会出现了;因为nextLine()把换行符消耗了。可以参考这个程序的正确写法(http://code.geeksforgeeks.org/CErAhD)。这个问题和C/C++(http://www.geeksforgeeks.org/problem-with-scanf-when-there-is-fgetsgetsscanf-after-it/)中的scanf()方法紧跟gets()方法的问题一样。其他的不同点:

  • BufferedReader是支持同步的,而Scanner不支持。如果我们处理多线程程序,BufferedReader应当使用。
  • BufferedReader相对于Scanner有足够大的缓冲区内存
  • Scanner有很少的缓冲区(1KB字符缓冲)相对于BufferedReader(8KB字节缓冲),但是这是绰绰有余的。
  • BufferedReader相对于Scanner来说要快一点,因为Scanner对输入数据进行类解析,而BufferedReader只是简单地读取字符序列。

翻译:crane-yuan[ 转载请保留原文出处、译者和译文链接。]


 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Java中Scanner类和BufferReader类之间的区别

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。