java 文件 缓冲区大小_自动选择文件I / O的缓冲区大小 - java

我有一个基本的疑问。通常,我不得不编写使用缓冲文件I / O的应用程序,每次遇到选择缓冲区大小的难题时,我最终都会经过反复试验,结果很糟糕。我想知道是否有任何方法或算法能够像Teracopy在Windows中处理文件时一样,根据基础平台自动确定作业的最佳缓冲区大小。我主要将Qt用于GUI。

如果可能的话,非常感谢C / C++ / C#/ Java中的一个小例子!

谢谢!

参考方案

在Java中,最佳值通常约为L1高速缓存大小,通常为32 KB。在Java中,至少选择1024字节或1 MB不会产生太大差异(<20%)

如果您按顺序读取数据,通常您的操作系统足够聪明,可以检测到该情况并为您预取数据。

您可以执行以下操作。该测试似乎表明所使用的块大小存在显着差异。

public static void main(String... args) throws IOException {

for (int i = 512; i <= 2 * 1024 * 1024; i *= 2)

readWrite(i);

}

private static void readWrite(int blockSize) throws IOException {

ByteBuffer bb = ByteBuffer.allocateDirect(blockSize);

long start = System.nanoTime();

FileChannel out = new FileOutputStream("deleteme.dat").getChannel();

for

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值