我使用MappedByteBuffers通过易失性变量(写入器更新位置,读取器读取写入器的位置)来实现文件的读取器和写入器之间的线程安全(这是一个文件上传系统,传入的文件是流,如果需要的话) 。显然还有更多的技巧(稀疏文件,两个映射增长的力量),但是所有这些都归结为这一点。
我找不到在不同时将文件完全缓存在内存中的情况下同时读取文件时写入文件的更快方法(由于剪切大小,我无法做到)。
IO是否有其他方法可以保证读者在同一过程中对字节的可见性? MappedByteBuffer通过Java内存模型间接保证,我希望其他解决方案也能做到这一点(阅读:非特定于平台的信息以及更多信息)。
这是最快的方法吗?我在文档中缺少什么吗?
最佳答案
几年前,我在当时还不错的硬件上进行了一些测试,MappedByteBuffer
比任何其他I / O技术快约20%。这样做确实有一个缺点,那就是您需要事先知道文件大小。