我正在从 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/