Зачем использовать BufferedReader в этом случае? - PullRequest
5 голосов
/ 02 июня 2009

В чем разница между использованием BufferedReader вокруг StringReader в следующем коде и использованием только StringReader? При загрузке DOM в строке 2 обоих примеров создается впечатление, что 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 ]

18 голосов
/ 02 июня 2009

В данном конкретном случае я не вижу никакой пользы. В общем, есть два преимущества:

  • Очень удобный метод readLine() определен только в BufferedReader, а не Reader (здесь не имеет значения)
  • BufferedReader уменьшает количество операций ввода-вывода, когда отдельные вызовы базового считывателя потенциально дороги (т. Е. Меньше объемных вызовов быстрее, чем множество мелких) - опять же, не имеет значения для StringReader

Вырезать и вставлять не удалось?

4 голосов
/ 02 июня 2009

РЕДАКТИРОВАТЬ: мой оригинальный ответ ниже. Приведенное ниже значение не имеет отношения к в этом случае, так как буферизованный считыватель упаковывает StringReader, который упаковывает String. Таким образом, буферизация не выполняется, и BufferedReader представляется избыточным. Вы могли бы аргументировать использование лучших / последовательных методов, но это было бы довольно незначительно.

Возможно, результат копирования / вставки или, возможно, слишком большой рефактор, управляемый IDE!

BufferedReader попытается прочитать более оптимальным способом.

То есть, он будет считывать большие порции данных за один раз (в настраиваемом количестве), а затем делать доступными по мере необходимости. Это уменьшит количество операций чтения с диска (и т. Д.) За счет некоторого использования памяти.

Цитата из Javadoc:

В общем, каждый запрос на чтение сделан из Читатель вызывает соответствующее чтение просьба сделать из базового символьный или байтовый поток. это поэтому желательно обернуть BufferedReader вокруг любого Reader, чей Операции read () могут быть дорогостоящими, например, как FileReaders и InputStreamReaders

1 голос
/ 02 июня 2009

Версия BufferedReader была скопирована из некоторого кода, который использовался для чтения из FileReader?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...