相关疑难解决方法(0)

使用FileInputStream时如何确定理想的缓冲区大小?

我有一个从文件创建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();
Run Code Online (Sandbox Code Playgroud)

什么是最大化吞吐量的缓冲区的理想大小?我知道这是依赖于系统的,我很确定它的操作系统,文件系统硬盘依赖,并且可能还有其他硬件/软件.

(我应该指出,我对Java有点新手,所以这可能只是一些我不知道的Java API调用.)

编辑:我不提前知道将要使用的系统类型,所以我不能假设很多.(因为那个原因,我正在使用Java.)

编辑:上面的代码缺少像try..catch这样的东西,以使帖子更小

java filesystems performance file-io buffer

147
推荐指数
7
解决办法
10万
查看次数

标签 统计

buffer ×1

file-io ×1

filesystems ×1

java ×1

performance ×1