Оптимальный размер блока в потоках Java - PullRequest
6 голосов
/ 12 апреля 2011

У меня есть теоретический вопрос.Давайте представим, что у вас есть InputStream и OutputStream.Вам необходимо скопировать контент из одного в другой, и вы точно не знаете размер контента, который вам нужно перенести.Каков наилучший выбор размера блока в методе write?

Ответы [ 2 ]

8 голосов
/ 12 апреля 2011

Ответ: это зависит. Для общего решения, перестаньте беспокоиться об этом и просто используйте библиотеку. Общий выбор:

3 голосов
/ 12 апреля 2011

Размер буфера по умолчанию для BufferedInputStream и BufferedOutputStream составляет 8 КБ, и обычно это хороший размер.

Примечание: если вы читаете Socket достаточно быстро, вы редко получите больше одного пакета, ~ 1,5 КБ,Если вы читаете с диска, вы, как правило, получаете тот размер, который запрашиваете, однако производительность не сильно улучшается с 32 КБ до 256 КБ и, вероятно, будет зависеть от используемого вами оборудования.

Однако ятакже обнаружили, что если вы не проводите сравнительный анализ, вы редко видите заметную разницу, если вы используете только 512 байт в качестве размера буфера (что делают потоки Inflator / Deflator), то есть разница может составлять 15% или меньше.Вы вряд ли заметите разницу с размерами буфера между 512 байтами и 32 КБ.Последнее, вероятно, будет более чем достаточно для большинства ситуаций.Я обычно использую 256 КБ, так как у меня много памяти и несколько предварительно выделенных буферов.

...