我从c ++切换到Java,现在浏览一些关于Java IO的文档。因此,如果我想从无缓冲的字节流中创建缓冲字符流,我可以通过两种方式实现:
Reader input1 = new BufferedReader(new InputStreamReader(new FileInputStream("Xanadu.txt")));
和
Reader input2 = new InputStreamReader(new BufferedInputStream(new FileInputStream("Xanadu.txt")));
所以我可以使它成为角色,然后缓冲或反之亦然。 它们之间有什么区别,哪个更好?
答案 0 :(得分:0)
从功能上讲,没有区别。这两个版本的行为方式相同。
性能可能有所不同,第一个版本可能比第二个版本快一点,当您一次从Reader
读取字符时。
在第一个版本中,整个数据缓冲区将在一次操作中从字节转换为字符。然后,read()
上的每个Reader
调用都将直接从字符缓冲区中获取字符。
在第二个版本中,read()
上的每个Reader
调用都会对输入流执行一次或多次read()
次调用,并仅将读取的字节转换为字符。< / p>
如果我要实现这个(精确的)功能,我会这样做:
Reader input = new BufferedReader(new FileReader("Xanadu.txt"));
让FileReader
处理引擎下的字节到字符解码。
有一种情况可以使用InputStreamReader
,但前提是您需要明确指定字节到字符转换的字符集。