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

标签 java bufferedreader inputstreamreader

我正在从 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,但前提是您需要显式指定字节到字符转换的字符集。

关于java.io 从无缓冲字节获取缓冲字符流的两种方法一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36769553/

相关文章:

java - Axis2实现和 stub 生成问题

java - Android 不从网站获取数据到 ArrayList

java - 在 Java 中按交集后的特定属性对对象列表进行排序

java - hibernate :获取太多行

java - 打印文本文件的行时,阅读器返回每行之间的行间距

java - 如何抑制 BufferReader 的空输出?

java - InputStreamReader 的 HttpsURLConnection 和字符集?

java - 从 InputStream 读取文本和二进制数据

java - 要映射的计时器类

java - 解析文本文件的最简洁方法