为什么在这种情况下使用 BufferedReader ?
-
06-09-2019 - |
题
在以下代码中在 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();
解决方案
在这种特殊情况下,我看不到任何好处。总的来说有两个好处:
- 非常方便的哦
readLine()
方法仅定义在BufferedReader
而不是Reader
(此处无关) BufferedReader
减少 IO,其中对底层读取器的单独调用可能会很昂贵(即更少的大块调用比大量的小调用更快)-同样,与StringReader
剪切粘贴失败?
其他提示
编辑:下面我原来的答复。下面的不是有关在这种情况下,由于缓冲读取器被包裹一个StringReader,它包装的字符串。因此,有没有要进行缓冲,并BufferedReader中似乎是多余的。您的可能的做一个参数,使用最好的/一致的做法,但是这将是非常脆弱的。
一个复制/粘贴,或者可能是IDE驱动重构太远的可能的结果!
的BufferedReader将试图在一个更优化的方式来阅读。
即,将在一气呵成(在可配置量)较大的读取数据块,然后使可作为必需的。这将减少的数目的一些内存使用情况的费用从磁盘(等)的读取。
要从的Javadoc引述如下:
在一般情况下,每个读请求由 一个阅读器会导致相应的读 到进行请求的底层的 字符或字节流。它是 因此,建议一个包 周围的任何阅读器,其的BufferedReader 读()操作可能是昂贵的,例如 如FileReaders和InputStreamReaders
在的BufferedReader版本是从一些代码,用于从一个的FileReader读取复制?
不隶属于 StackOverflow