繁体   English   中英

Java FileChannel.force()和StandardOpenOption.Sync之间的区别是什么?

[英]What is the diff between Java FileChannel.force() and StandardOpenOption.Sync?

我不确定新的Java 7 nio.file.StandardOpenOption是否与旧的FileChannel.force()方法不同。

有没有办法做O_DIRECT?

无法使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM