Увеличьте размер внутреннего буфера, используемого Java FileInputStream - PullRequest
1 голос
/ 26 января 2011

При вызове read(byte[]) для FileInputStream размер чтения всегда равен 8 КБ, даже если byte[] экспоненциально велико.

Как увеличить максимальную сумму чтения, возвращаемую за звонок?

Пожалуйста, не предлагайте метод, который просто маскирует ограничение FileInputStream.


Обновление: Кажется, нет реального решения этой проблемы. Тем не менее, я рассчитал накладные расходы вызова метода примерно до 226 мкс в моей системе, для файла 1G. Вероятно, можно с уверенностью сказать, что это никак не повлияет на производительность.

Ответы [ 3 ]

1 голос
/ 26 января 2011

Вы можете попытаться отобразить файл в памяти с помощью NIO, но я не уверен, в чем проблема с 8K.Вы можете либо скопировать 8K в ваш больший массив, либо использовать возвращаемую длину для вызова

public int read(byte[] b,
                int off,
                int len)
         throws IOException

, где значение off является значением, возвращаемым после последнего чтения.

1 голос
/ 26 января 2011

Оберните его в BufferedInputStream, который позволяет вам указать размер буфера.

0 голосов
/ 12 июля 2013

Размер каждого чтения, который вы видите, может быть размером буфера, используемым самой операционной системой. Поэтому вам, возможно, придется внести изменения на уровне ОС. То, как вы это сделаете, будет зависеть от системы. Возможно, вы сможете указать размер блока при создании файловой системы. Это традиционно было возможно для файловых систем Unix. Хотя по иронии судьбы я полагаю, что эта функция использовалась, чтобы иметь меньшие блоки для файловых систем, которые, как ожидается, будут иметь много маленьких файлов.

...