在以下代码中使用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();
答案 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读取的代码中复制的吗?