Я использую ByteBuffer.allocateDirect (), чтобы выделить некоторую буферную память для чтения файла в память, а затем, в конечном итоге, хэшировать байты этих файлов и получить из него хэш файла (SHA). Размер входных файлов очень велик - от нескольких КБ до нескольких ГБ.
Я прочитал несколько потоков и страниц (даже некоторые о SO) относительно выбора размера буфера. Некоторые советовали попытаться выбрать тот, который использует собственная файловая система, чтобы минимизировать вероятность операции чтения для частичного блока и т. Д. Например, буфер размером 4100 байт, а NTFS по умолчанию - 4096, поэтому дополнительные 4 бита потребуют отдельной операции чтения, что является чрезвычайно расточительным.
Итак, придерживаясь степеней 2, 1024, 2048, 4096, 8192 и т. Д. Я видел, как некоторые рекомендуют буферы размером 32 КБ, а другие рекомендуют делать буфер размером с входной файл (возможно, подходит для небольших файлов, но что насчет больших файлов?).
Насколько важно придерживаться собственных буферов размера блока? Говоря современным языком (при условии, что современный диск SATA или лучше с как минимум 8 МБ кеш-памяти на диске и другая современная «магия» ОС для оптимизации ввода-вывода), насколько критичным является размер буфера и как мне лучше всего определить, какой размер установить для моего? Могу я его статически установить или определить динамически? Спасибо за понимание.