我有一个方法,可以从文件创建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 这样使帖子更小的东西。