Существует ли причина использовать BufferedReader по InputStreamReader при чтении всех символов?

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

MyObject object1 = MyObject();
MyObject object2 = MyObject(object1);

В C ++ 0x это также позволяет использовать auto:

auto object1 = MyObject();
auto object2 = MyObject(object1);
5
задан Stu Thompson 17 September 2008 в 07:49
поделиться

4 ответа

В этом случае я сделал бы, как Вы делаете (используйте массив байтов для буферизации и не одного из потоковых буферов).

Существуют исключения, все же. Одно место Вы видите буферы (вывод на этот раз) находится в сервлете API. Данные не записаны в базовый поток, пока сброс () не называют, позволяя Вам буферизовать вывод, но затем вывести буфер, если ошибка происходит, и запишите ошибочную страницу вместо этого. Вы могли бы буферизовать вход, если бы необходимо было сбросить поток для перечитывания метки использования (интервал) и сбросить (). Например, возможно, Вы осмотрели бы заголовок файла перед выбором который обработчик содержимого передать поток.

Не связанный, но я думаю, что необходимо переписать потоковую обработку. Этот шаблон работает лучше всего для предотвращения утечек ресурсов:

    InputStream stream = new FileInputStream("in");
    try { //no operations between open stream and try block
        //work
    } finally { //do nothing but close this one stream in the finally
        stream.close();
    }

Если Вы открываете несколько потоков, блоки попытки/наконец вложенного множества.

Другая вещь, которую делает Ваш код, делает предположение, что возвращенное содержание кодируется в наборе символов Вашего VM по умолчанию (хотя это могло бы соответствовать, в зависимости от варианта использования).

4
ответ дан 14 December 2019 в 13:52
поделиться

Мой пищеварительный тракт говорит мне, что, так как Вы уже выполняете буферизацию при помощи массива байтов, это избыточно для использования BufferedReader.

0
ответ дан 14 December 2019 в 13:52
поделиться

Вы корректны при использовании BufferedReader для чтения содержания HTTP и заголовков, Вы захотите InputStreamReader, таким образом, можно будет считать байт для байта.

BufferedReader в этом сценарии иногда делает странные вещи... особенно когда дело доходит до чтения HTTP заголовки POST, иногда Вы будете не мочь считать данные POST при использовании InputStreamReader, можно считать длину содержания и считать что много байтов...

1
ответ дан 14 December 2019 в 13:52
поделиться

Каждый вызов одного из методов чтения InputStreamReader может привести к считыванию одного или нескольких байтов из основного потока байт-входов. Для эффективного преобразования байтов в символы из базового потока может быть прочитано больше байтов, чем необходимо для выполнения текущей операции чтения.

1
ответ дан 14 December 2019 в 13:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: