6

在以下代码中围绕 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();
4

3 回答 3

19

在这种特殊情况下,我看不到任何好处。一般来说有两个好处:

  • oh-so-handyreadLine()方法只定义在BufferedReader而不是Reader(这里无关)
  • BufferedReader减少对底层读取器的单独调用可能很昂贵的 IO(即,更少的大块调用比许多小的调用更快) - 同样,与StringReader

剪切和粘贴失败?

于 2009-06-02T19:29:56.743 回答
4

编辑:我的原始答案如下。在这种情况下,下面的内容不相关,因为缓冲的阅读器正在包装一个 StringReader,它包装了一个字符串。所以没有要执行的缓冲,而且 BufferedReader 似乎是多余的。您可以为使用最佳/一致的实践提出论据,但这将非常脆弱。

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

BufferedReader 将尝试以更优化的方式进行读取。

也就是说,它将一次性读取更大的数据块(以可配置的数量),然后根据需要提供。这将以牺牲一些内存使用为代价来减少从磁盘(等)读取的次数。

引用 Javadoc:

通常,由 Reader 发出的每个读取请求都会导致对底层字符或字节流发出相应的读取请求。因此,建议将 BufferedReader 包装在 read() 操作可能成本高昂的任何 Reader 周围,例如 FileReaders 和 InputStreamReaders

于 2009-06-02T19:26:34.487 回答
1

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

于 2009-06-02T19:26:28.717 回答