按字节读取txt文件缓存区大小设置多少比较好?

读取 txt 文件常规写法有逐行读取和按照字节缓存读取,那么按照字节缓存读取时,设置缓存区多大比较好呢?百度了一下,没发现有说这个问题的,自测了一把,以事实说话。

常规读取方法如下:

// 字节流读取
try(InputStream in = new FileInputStream("test.txt")) 
{
    byte[] readBuffer = new byte[1024];
    while(in.available() > 0) 
    {
        in.read(readBuffer);
    }
} catch (Exception e) {
    
}

我的 test.txt 文件大小为 200k,按照每次读取 1024字节,执行 3 次分别耗时:893110、880807、1202766  纳秒

按照每次读取 1024 * 1024 来读取,执行 3 次分别耗时:1028437、1260876、800448 纳秒

直接一次性读完(new byte[in.available()]),执行 3 次分别耗时:515134、265682、835523

如上3种方式,貌似缓存区间越大越好,事实是不是这样呢?我们将文件扩大20倍左右(3826k),按顺序分别执行 3 次。

每次读取 1024字节:15811857、16539536、17310929;

每次读取 1024 * 1024字节:4509521、3230585、3017516;

直接一次性读完(new byte[in.available()]):9265355、5899443、4731228

每次读取 1024 * 1024 * 1024字节:938333314、489835646、505372921

总结:

I/O字节读取缓冲区不宜设置过大,根据实际业务场景来,如果文件大部分小于1M,一次性读取完即可,大于 1M 的还是按照 1M每次读取比较好。小伙伴们觉得呢?

猜你喜欢

转载自blog.csdn.net/kuloujianzun/article/details/84134786