为什么在这种情况下使用BufferedReader?

时间:2009-06-02 19:24:08

标签: java xml bufferedreader

在以下代码中使用StringReader周围的BufferedReader与仅使用StringReader之间的区别是什么?通过在两个示例的第2行中加载DOM,似乎没有必要使用BufferedReader?

    InputSource is = new InputSource(new StringReader(html));
    Document dom = XMLResource.load(is).getDocument();

VS

    InputSource is = new InputSource(new BufferedReader(new StringReader(html)));
    Document dom = XMLResource.load(is).getDocument();

3 个答案:

答案 0 :(得分:18)

在这种特殊情况下,我认为没有任何好处。一般来说,有两个好处:

  • 非常方便的readLine()方法仅在BufferedReader而不是Reader中定义(此处不相关)
  • BufferedReader减少IO,其中对底层阅读器的单个调用可能很昂贵(即,较少的粗调调用比许多小调用快) - 再次,与StringReader无关

剪切和粘贴失败?

答案 1 :(得分:4)

编辑:我的原始答案如下。在这种情况下,下面的不是相关的,因为缓冲的阅读器正在包装一个包装String的StringReader。因此,没有缓冲要执行,BufferedReader似乎是多余的。你可以为使用最佳/一致的做法做出争论,但这将是非常脆弱的。

可能是复制/粘贴的结果,或者是IDE驱动的重构太过分了!

BufferedReader将尝试以更优化的方式阅读。

也就是说,它将一次读取更大的数据块(以可配置的数量),然后根据需要提供。这将减少从磁盘(等)读取的数量,但会占用一些内存。

引用Javadoc:

  

一般来说,每个读取请求都是由   Reader会导致相应的读取   请求基础   字符或字节流。它是   因此建议包装一个   BufferedReader围绕任何Reader   read()操作可能是昂贵的,例如   作为FileReaders和InputStreamReaders

答案 2 :(得分:1)

BufferedReader版本是从一些用于从FileReader读取的代码中复制的吗?