![](/img/trans.png)
[英]StandardOpenOption.SYNC vs StandardOpenOption.DSYNC
[英]What is the diff between Java FileChannel.force() and StandardOpenOption.Sync?
无法使用JVM进行O_DIRECT IO。 原因之一(我认为)是文件内容所在的内存需要与512字节边界对齐。 用ByteBuffers
分配的内存不满足此属性。
与此512字节对齐类似的另一个问题是,您只能执行512字节倍数的IO操作。 因此,如果您想读取一个700字节的文件,将会遇到麻烦。
这是介绍这些问题的类似话题。 我在博客中描述了一种如何将直接IO实现到JVM中的方法 。 它还暗示了如何向StandardOpenOption
类添加O_DIRECT选项(必须在JDK源代码/src/solaris/native/sun/nio/fs/genUnixConstants.c
常量添加到文件/src/solaris/native/sun/nio/fs/genUnixConstants.c
中)。
我认为两者之间的区别在于StandardOpenOption
是自动执行的,而您必须调用FileChannel.force()
将数据发送到基础存储设备。 我不确定O_DIRECT。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.