Java.io从无缓冲字节中获取缓冲字符流的两种方法一

Java.io Two ways to obtain buffered character stream from unbuffered byte one

我正在从 C++ 切换到 Java,现在正在阅读一些关于 Java IO 的文档。所以如果我想从非缓冲字节流中创建缓冲字符流,我可以通过两种方式做到这一点:

Reader input1 = new BufferedReader(new InputStreamReader(new FileInputStream("Xanadu.txt")));

Reader input2 = new InputStreamReader(new BufferedInputStream(new FileInputStream("Xanadu.txt")));

所以我可以让它成为字符,然后缓冲,反之亦然。 它们有什么区别,哪个更好?

在功能上,没有区别。这两个版本的行为方式相同。

性能上可能存在差异,当您一次读取 Reader 个字符时,第一个版本可能比第二个版本快一点。

  • 在第一个版本中,整个充满数据的缓冲区将在一次操作中从字节转换为字符。然后 Reader 上的每个 read() 调用都会直接从字符缓冲区中获取一个字符。

  • 在第二个版本中,对 Reader 的每个 read() 调用都会对输入流执行一个或多个 read() 调用,并且仅将读取的那些字节转换为一个角色。


如果我要实现这个(精确的)功能,我会这样做:

  Reader input = new BufferedReader(new FileReader("Xanadu.txt"));

并让 FileReader 处理底层的字节到字符解码。

有使用 InputStreamReader 的情况,但前提是您需要明确指定字节到字符转换的字符集。