我有一个从文件创建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();
最大化吞吐量的理想缓冲区大小是多少?我知道这是与系统有关的,并且我很确定它与操作系统,文件系统和 HDD有关,并且可能还有其他硬件/软件。
(我应该指出,我是Java的新手,所以这可能只是一些我不知道的Java API调用。)
编辑:我不提前知道将要使用的系统种类,所以我不能承担很多。(出于这个原因,我使用Java。)
编辑:上面的代码缺少try..catch之类的东西,以使帖子更小