2

大家好,在读取我们使用的输入数据流时

BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));

如果BufferedReader阅读流这么好,为什么我们不能只使用

BufferedReader stdin=new BufferedReader(System.in);

为什么我们需要InputStreamReader??

4

5 回答 5

2

BufferedReader 似乎是 Reader 类的包装类。用 System.in 构造一个 BufferedReader 根本不是有效的语法。BufferedReader 类的原因来自文档:

通常,由 Reader 发出的每个读取请求都会导致对底层字符或字节流发出相应的读取请求。因此,建议将 BufferedReader 包装在 read() 操作可能成本高昂的任何 Reader 周围,例如 FileReaders 和 InputStreamReaders。例如,

BufferedReader in = new BufferedReader(new FileReader("foo.in"));

将缓冲来自指定文件的输入。如果没有缓冲,每次调用 read() 或 readLine() 都可能导致从文件中读取字节,转换为字符,然后返回,这可能非常低效。

于 2012-10-15T05:52:41.157 回答
1

很简单,因为没有BufferedReader(InputStream)构造函数。只有两个构造函数可用:

于 2012-10-15T05:49:00.810 回答
0

输入流读取器通过管道连接到缓冲读取器。

JVM 将分配一定数量的缓冲区空间来一次性存储输入,而不是逐个字节或逐个字符地存储。所以,当用户通过 InputStreamReader 完全输入输入后,输入会被存储在 JVM 分配的缓冲区位置中。使用此 Reader,读取速度更快,便于以后处理。

于 2012-10-15T05:56:14.863 回答
0

因为System.in是 Streams 并且BufferedReader是阅读器,所以你不能将流放在阅读器中,所以你必须像你正在做的那样为阅读器转换它。

new BufferedReader(new InputStreamReader(System.in));

Readers 和 Writers 在编码(UTF-8、ISO8859-2 等)下操作字符,也称为“文本”。流操作字节,不一定是构成任意对象的字节。(大多数只是操作字节数组。)这些数据也称为“二进制数据”。

于 2012-10-15T05:57:17.580 回答
0

您可以使用BufferedInputStream(InputStream in) 。我想这就是你要找的...

于 2012-10-15T05:50:44.480 回答