我正在尋找最快的方式讀取文件 - 我不需要看到讀取字節,我只需要文件被完全讀取,以便它獲取OS文件緩存。最快的方式讀取文件到操作系統文件緩存
這是我在用的時刻(但它涉及到分配爲每個文件直接緩存)
FileInputStream f = new FileInputStream(file);
FileChannel ch = f.getChannel();
ByteBuffer bb = ByteBuffer.allocateDirect((int)file.length());
ch.read(bb);
你當前的實現是錯誤的 - 如果文件的大小是1G,你的緩衝區分配將失敗,而是分配一個合理大小爲X的緩衝區並在循環中讀取你的文件。 PS:爲什麼地球上你想要緩存中的文件?即使你加載它,也絕對不能保證它在你需要時仍然存在。 –
是的,好點。我在我的代碼中糾正了它。我爲什麼要這樣做?因爲我有一個使用NIO通過套接字從DVD傳輸文件的Java庫。由於某些原因,從DVD傳輸時速度非常慢,但當文件位於Windows文件緩存中時速度非常快。所以,我的解決方案是讀取50 MB的文件,然後使用該庫傳輸它們(當我確定它們被緩存時)。 – Jacko
好吧,總的時間(從DVD - >到緩存+從緩存 - >連接的另一端)仍然大致相同,因爲(因爲我不瞭解你)瓶頸是從DVD讀取。 –