Java: делает ли использование буферизованного входного потока сделать преобразование входных потоков в byte [] более эффективным? - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу преобразовать входной поток в байт [], и я использую IOUtils.toByteArray(inputStream). Будет ли он более эффективным, если использовать для типа inputStream оболочку типа BufferedInputStream? Это экономит память?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Будет ли он более эффективным с помощью обертки, такой как BufferedInputStream для inputStream?

Не имеет никакого значения.IOUtils.toByteArray считывает данные в буфер размером 4096 байт.BufferedInputStream по умолчанию использует 8192-байтовый буфер.Использование BufferedInputStream делает меньше операций ввода-вывода, но вам нужен очень быстрый источник данных, чтобы заметить любую разницу.

Если вы читаете InputStream по одному байту за раз (или несколько байтов), то действительно используете BufferedInputStreamповышает производительность, поскольку уменьшает количество вызовов операционной системы в 8000 раз. И сравнительно много вызовов операционной системы занимает много времени.

Сохраняет ли это память?

Нет.IOUtils.toByteArray создаст new byte[4096] независимо от того, передан ли буферизованный или небуферизованный InputStream.A BufferdedInputStream стоит немного больше памяти для создания.Но ничего существенного.

0 голосов
/ 26 апреля 2018

с точки зрения конечного потребления памяти это не поможет, так как вам в любом случае потребуется переместить весь поток в byte[], размер массива будет одинаковым, поэтому потребление памяти будет таким же.

Что делает BufferedInputStream, это оборачивает другой поток и вместо этого записывает в него напрямую, он буферизует ваш ввод во внутренний буфер и записывает в нижележащий поток только тогда, когда он closes/flushes или когда внутренний буфер заполнен. Это может ускорить ваши операции записи, так как вы будете делать их в пакетном режиме вместо того, чтобы писать каждый раз напрямую, но это не поможет, если вы будете читать их с другой стороны.

...