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