В какой момент упаковка FileOutputStream с BufferedOutputStream имеет смысл с точки зрения производительности?

У меня есть модуль, который отвечает за чтение, обработку и запись байтов на диск. Байты поступают через UDP, и после сборки отдельных дейтаграмм последний массив байтов, который обрабатывается и записывается на диск, обычно составляет от 200 до 500 000 байтов. Иногда встречаются массивы байтов, размер которых после сборки превышает 500 000 байтов, но это относительно редко.

В настоящее время я использую метод FileOutputStream write (byte \ [\]) . Я также экспериментирую с заключением FileOutputStream в BufferedOutputStream , включая использование конструктора, который принимает размер буфера в качестве параметра .

Похоже, что использование BufferedOutputStream имеет тенденцию к немного большей производительности, но я только начал экспериментировать с разными размерами буфера. У меня есть только ограниченный набор образцов данных для работы (два набора данных из образцов прогонов, которые я могу передать через свое приложение).Есть ли какое-то общее практическое правило, которое я мог бы применить, чтобы попытаться вычислить оптимальные размеры буфера, чтобы уменьшить количество операций записи на диск и максимизировать производительность записи на диск с учетом информации, которую я знаю о данных, которые я пишу?

44
задан Peter Lawrey 10 April 2016 в 13:53
поделиться