大家好,在阅读我们使用的输入数据流时
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
如果BufferedReader
非常适合阅读流,为什么我们只能使用
BufferedReader stdin=new BufferedReader(System.in);
为什么我们需要InputStreamReader
??
答案 0 :(得分:2)
BufferedReader似乎是Reader类的包装类。使用System.in构造BufferedReader只是无效的语法。 BufferedReader类的原因来自文档:
通常,每个读取请求都会产生相应的读取请求 读取基础字符或字节流的请求。它 因此建议在任何Reader周围包装一个BufferedReader 其read()操作可能代价高昂,例如FileReaders和 InputStreamReaders。例如,
BufferedReader in = new BufferedReader(new FileReader(“foo.in”));
将缓冲指定文件的输入。没有缓冲,每个 调用read()或readLine()可能会导致读取字节 该文件,转换为字符,然后返回,这可以是 非常低效。
答案 1 :(得分:1)
简单地说,因为没有BufferedReader(InputStream)
构造函数。只有两个构造函数可用:
答案 2 :(得分:0)
您可以使用BufferedInputStream(InputStream in)。我想这就是你要找的......
答案 3 :(得分:0)
输入流读取器通过PipeLining连接到Buffered Reader。
JVM将分配一定量的缓冲区空间来一次性存储输入,而不是逐字节或逐字符存储。因此,在用户通过InputStreamReader完全输入输入后,输入将存储在JVM分配的缓冲区中。 使用此Reader,读取速度更快,以便以后处理。
答案 4 :(得分:0)
因为System.in
是Streams而BufferedReader
是读者,所以你不能将流放入读者,这样你就必须像读书那样为读者转换它。
new BufferedReader(new InputStreamReader(System.in));
读者和作家在编码下操纵字符(UTF-8,ISO8859-2, 等),也称为“文本”。流操纵字节,不一定是字节 构成一个任意对象。 (大多数只是操纵字节数组。)这些 数据也称为“二进制数据”。