У меня есть метод, который создает MessageDigest (хэш) из файла, и мне нужно сделать это для большого количества файлов ( >= 100 000). Насколько я должен делать буфер, используемый для чтения из файлов, чтобы максимизировать производительность?
Большинство из нас знакомы с базовым кодом (который я повторю здесь на всякий случай):
MessageDigest md = MessageDigest.getInstance( "SHA" );
FileInputStream ios = new FileInputStream( "myfile.bmp" );
byte[] buffer = new byte[4 * 1024]; // what should this value be?
int read = 0;
while( ( read = ios.read( buffer ) ) > 0 )
md.update( buffer, 0, read );
ios.close();
md.digest();
Каков идеальный размер буфера для максимальной пропускной способности? Я знаю, что это зависит от системы, и я уверен, что его ОС, файловая система и жесткий диск зависят, и там может быть другое аппаратное/программное обеспечение в миксе.
(Я должен отметить, что я несколько новичок в Java, так что это может быть просто вызов Java API, о котором я не знаю.)
Изменить: Я заранее не знаю, в каких системах это будет использоваться, поэтому я не могу предположить много. (Я использую Java по этой причине.)
Изменить: В приведенном выше коде отсутствуют такие вещи, как try..catch, чтобы сделать сообщение меньше