1. 程式人生 > >按位元組讀取txt檔案快取區大小設定多少比較好?

按位元組讀取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每次讀取比較好。小夥伴們覺得呢?