【问题标题】:Java.io Two ways to obtain buffered character stream from unbuffered byte oneJava.io从无缓冲字节获取缓冲字符流的两种方法一
【发布时间】:2016-08-14 15:38:48
【问题描述】:

我正在从 c++ 切换到 Java,现在正在阅读一些关于 Java IO 的文档。所以如果我想从无缓冲的字节流中制作缓冲的字符流,我可以通过两种方式做到这一点:

Reader input1 = new BufferedReader(new InputStreamReader(new FileInputStream("Xanadu.txt")));

Reader input2 = new InputStreamReader(new BufferedInputStream(new FileInputStream("Xanadu.txt")));

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

【问题讨论】:

    标签: java bufferedreader inputstreamreader


    【解决方案1】:

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

    性能可能存在差异,当您一次从Reader 读取字符时,第一个版本可能比第二个版本快一点。

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

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


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

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

    FileReader 在后台处理字节到字符的解码。

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

    【讨论】:

      猜你喜欢
      • 2015-07-26
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多