Зачем использовать BufferedReader в этом случае?
-
06-09-2019 - |
Вопрос
В чем разница между использованием BufferedReader вокруг StringReader в следующем коде и использованием только StringReader?Загружая DOM во второй строке обоих примеров, кажется, что BufferedReader не нужен?
InputSource is = new InputSource(new StringReader(html));
Document dom = XMLResource.load(is).getDocument();
ПРОТИВ
InputSource is = new InputSource(new BufferedReader(new StringReader(html)));
Document dom = XMLResource.load(is).getDocument();
Решение
В данном конкретном случае я не вижу никакой выгоды.В целом есть два преимущества:
- О, так удобно
readLine()
метод определен только вBufferedReader
скорее, чемReader
(здесь не имеет значения) BufferedReader
уменьшает количество операций ввода-вывода, когда отдельные вызовы базового считывателя потенциально дороги (т.е.меньшее количество коротких вызовов выполняется быстрее, чем много маленьких) - опять же, не имеет значения дляStringReader
Вырезать и вставить не удалось?
Другие советы
РЕДАКТИРОВАТЬ:Мой оригинальный ответ ниже.Нижеприведенное не в данном случае это актуально, поскольку буферизованное средство чтения оборачивает StringReader, который оборачивает String.Таким образом, буферизация не требуется, и BufferedReader кажется избыточным.Ты мог приведите аргумент в пользу использования лучших/последовательных практик, но это было бы довольно неубедительно.
Возможно, результат копирования/вставки или, возможно, слишком глубокого рефакторинга, управляемого IDE!
BufferedReader попытается прочитать более оптимальным способом.
То есть он будет считывать большие объемы данных за один раз (в настраиваемом объеме), а затем предоставлять их по мере необходимости.Это уменьшит количество операций чтения с диска (и т. д.) за счет некоторого использования памяти.
Цитата из Javadoc:
В общем, каждый запрос на чтение, сделанный с читателем, вызывает соответствующий запрос на чтение из базового символа или байтового потока.Поэтому рекомендуется обернуть буферизатор вокруг любого читателя, чьи операции read () могут быть дорогостоящими, такими как FileReaders и InpintStreamReaders
Версия BufferedReader была скопирована из какого-то кода, который использовался для чтения из FileReader?