我有一个从文件创建 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 有点新,所以这可能只是一些我不知道的 JavaAPI 调用。)
编辑: 我事先并不知道这将用于哪些类型的系统,所以我不能假设很多。(出于这个原因,我使用了 Java。)
编辑: 上面的代码缺少类似 try. . catch 这样的东西,这样文章就变小了