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

时间:2016-04-21 12:24:24

标签: 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")));

所以我可以使它成为角色,然后缓冲或反之亦然。 它们之间有什么区别,哪个更好?

1 个答案:

答案 0 :(得分:0)

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

性能可能有所不同,第一个版本可能比第二个版本快一点,当您一次从Reader读取字符时。

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

  • 在第二个版本中,read()上的每个Reader调用都会对输入流执行一次或多次read()次调用,并仅将读取的字节转换为字符。< / p>

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

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

FileReader处理引擎下的字节到字符解码。

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