Возможно, вам не всегда нужна буферизация, поэтому ответом будет «Нет», в некоторых случаях это просто накладные расходы.
Есть еще одна причина, по которой это «Нет», и она может быть более серьезной. BufferedInputStream
(или BufferedReader
) может вызвать непредсказуемые сбои при использовании с сетевым сокетом, когда вы также включили тайм-аут на сокете. Тайм-аут может возникнуть при чтении пакета. Вы больше не сможете получить доступ к данным, которые были переданы в эту точку - даже если вы знали, что было некоторое ненулевое число байтов (см. java.net.SocketTimeoutException
, который является подклассом java.io.InterruptedIOException
, поэтому имеет переменную bytesTransferred
имеется).
Если вам интересно, как может произойти тайм-аут сокета во время чтения, просто подумайте о вызове метода read(bytes[])
, и исходный пакет, содержащий сообщение, в итоге был разделен, но один из частичных пакетов задерживается по истечении времени ожидания ( оставшаяся часть тайм-аута). Это может происходить чаще, когда снова заключено в нечто, реализующее java.io.DataInput
(любое из чтений для нескольких байтовых значений, например readLong()
или readFully()
или метод BufferedReader.readLine()
.
Обратите внимание, что java.io.DataInputStream
также является плохим кандидатом для потоков сокетов, которые имеют тайм-аут, так как он также плохо работает с исключениями тайм-аута.