Стратегия Java BufferedOutputStream - PullRequest
0 голосов
/ 08 июня 2011

Вы можете задать конструктору BufferedOutputStream параметр int для размера буфера.В моем сценарии у меня есть один процесс записи на диск и чтения процесса с диска.Наличие буфера по умолчанию в 8192 байта вызывает высокую фрагментацию больших файлов.

Теперь мне было интересно, смогу ли я уменьшить фрагментацию, если я увеличу размер буфера до 1 Мб.

Я думаю, что это должноРабота.Но будет ли BufferedOutputStream по-прежнему уважать мой буфер, если я всегда называю BufferedOutputStream.write(smallBuffer,0,i); // i being smaller than 8192

, я маленький, потому что я ловлю небольшие пакеты (8192 байта) по сети.Но я хочу, чтобы BufferedOutputStream действительно много буферизовал и не решал сбрасывать ранее?

Достаточно ли "1013 *" глупо, чтобы ждать, пока буфер не заполнится или не будет вызван flush().Или установлен механизм промывки по времени?

Ответы [ 2 ]

5 голосов
/ 08 июня 2011

Согласно Javadoc :

Обычно этот метод сохраняет байты из данного массива в буфере этого потока , сбрасывая буфер в основной выходной потокпри необходимости.

http://download.oracle.com/javase/6/docs/api/java/io/BufferedOutputStream.html

И если вы посмотрите на источники (реализация Sun):

public synchronized void write(byte b[], int off, int len) throws IOException {
    //flushBuffer() if necessary
    System.arraycopy(b, off, buf, count, len);
    count += len;
}

flushBuffer() происходит только еслиблок данных больше, чем весь буфер, или если добавление его в буфер вызовет переполнение.

Так что ответьте быстро: да.И не существует неявного flush(), вы должны вызывать вручную, если необходимо, и буфер еще не заполнен.

5 голосов
/ 08 июня 2011

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

Другими словами: больший размер буфера уменьшит фрагментацию для вашего варианта использования.

...