Вы также можете использовать более подробный способ построения:
MyObject object1 = MyObject();
MyObject object2 = MyObject(object1);
В C ++ 0x это также позволяет использовать auto
:
auto object1 = MyObject();
auto object2 = MyObject(object1);
В этом случае я сделал бы, как Вы делаете (используйте массив байтов для буферизации и не одного из потоковых буферов).
Существуют исключения, все же. Одно место Вы видите буферы (вывод на этот раз) находится в сервлете 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 по умолчанию (хотя это могло бы соответствовать, в зависимости от варианта использования).
Мой пищеварительный тракт говорит мне, что, так как Вы уже выполняете буферизацию при помощи массива байтов, это избыточно для использования BufferedReader.
Вы корректны при использовании BufferedReader для чтения содержания HTTP и заголовков, Вы захотите InputStreamReader, таким образом, можно будет считать байт для байта.
BufferedReader в этом сценарии иногда делает странные вещи... особенно когда дело доходит до чтения HTTP заголовки POST, иногда Вы будете не мочь считать данные POST при использовании InputStreamReader, можно считать длину содержания и считать что много байтов...
Каждый вызов одного из методов чтения InputStreamReader может привести к считыванию одного или нескольких байтов из основного потока байт-входов. Для эффективного преобразования байтов в символы из базового потока может быть прочитано больше байтов, чем необходимо для выполнения текущей операции чтения.