我使用MappedByteBuffers通过 volatile 变量实现文件的读取器和写入器之间的线程安全(写入器更新位置,读取器读取写入器的位置)(这是一个文件上传系统,传入的文件是一个流,如果有的话)。显然还有更多技巧(稀疏文件、两次映射增长的幂),但这一切都归结为这一点。
我找不到一种更快的方法来写入文件,同时读取相同的文件,而无需将相同的文件完全缓存在内存中(由于剪切大小,我无法做到这一点)。
是否有任何其他 IO 方法可以保证同一进程中读取器对写入字节的可见性? MappedByteBuffer 通过 Java 内存模型间接做出保证,我希望任何其他解决方案也能做同样的事情(阅读:非特定于平台等等)。
这是最快的方法吗?我在文档中遗漏了什么吗?
最佳答案
几年前,我在当时相当不错的硬件上做了一些测试,MappedByteBuffer
比任何其他 I/O 技术快大约 20%。它的缺点是写入时需要提前知道文件大小。
关于Java IO 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034844/