欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中Scanner类与BufferReader类的不同点(非常详细)

程序员文章站 2024-03-13 14:03:21
java.util.scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串。它本质上是使用正则表达式去读取不同的数据类型。 java.io.buffere...

java.util.scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串。它本质上是使用正则表达式去读取不同的数据类型。

java.io.bufferedreader类为了能够高效的读取字符序列,从字符输入流和字符缓冲区读取文本。

下面是两个类的不同之处:

当nextline()被用在nextxxx()之后,用scanner类有什么问题

尝试去猜测下面代码的输出内容;

// code using scanner class
import 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);
}
}

input:

50
geek

output:

enter an integer
enter a string
you have entered:- 50 and name as

让我们尝试使用bufferreader类,并且使用相同的输入

// code using bufferedreader class
import java.io.*;
class differ
{
public static void main(string args[])
throws ioexception
{
bufferedreader br = new bufferedreader(new
inputstreamreader(system.in));
system.out.println("enter an integer");
int a = integer.parseint(br.readline());
system.out.println("enter a string");
string b = br.readline();
system.out.printf("you have entered:- " + a +
" and name as " + b);
}
}

input:

50
geek

output:

enter an integer
enter a string
you have entered:- 50 and name as geek

在scanner类中如果我们在这任何7个nextxxx()方法之后调用nextline()方法,这nextline()方法不能够从控制台读取任何内容,并且,这游标不会进入控制台,它将跳过这一步。这nextxxx()方法是这些方法,nextint(),nextfloat(), nextbyte(), nextshort(), nextdouble(), nextlong(), next()。

在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只是简单地读取字符序列。

以上所述是小编给大家介绍的java中scanner类与bufferreader类的不同点(非常详细),希望对大家有所帮助