Определение подходящего размера буфера

Я использую ByteBuffer.allocateDirect () для выделения некоторой буферной памяти для чтения файла в память, а затем со временем хэширую эти байты файлов и получаю из них хеш файла (SHA). Размер входных файлов значительно варьируется - от нескольких килобайт до нескольких гигабайт.

Я прочитал несколько потоков и страниц (даже некоторые на SO) о выборе размера буфера. Некоторые посоветовали попытаться выбрать тот, который использует собственная файловая система, чтобы минимизировать шансы операции чтения для частичного блока и т. Д. Например, буфер размером 4100 байт и NTFS по умолчанию равны 4096, поэтому дополнительные 4 бита потребуют отдельной операции чтения, что является чрезвычайно расточительным.

Так что придерживаясь степеней 2, 1024, 2048, 4096, 8192 и т. Д., Я видел, что некоторые рекомендуют буферы размером 32 КБ, а другие рекомендуют делать буфер размером с входной файл (вероятно, хорошо для небольших файлов, но что о больших файлах?).

Насколько важно придерживаться собственных буферов размера блока? Говоря современным языком (если предположить, что современный SATA-накопитель или лучше с по крайней мере 8 Мбайт в кэш-памяти диска и другие «волшебные» современные ОС для оптимизации ввода / вывода), насколько критичен размер буфера и как мне лучше всего определить, какой размер установить в мой? Я мог бы статически установить его или определить динамически? Спасибо за понимание.

Ответы на вопрос(1)

Ваш ответ на вопрос