我正在寻找最快的方式读取文件 - 我不需要看到读取字节,我只需要文件被完全读取,以便它获取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读取。 –