2011-09-06 71 views

回答

0

我認爲兩者之間的區別在於StandardOpenOption會自動執行此操作,而您必須致電FileChannel.force()將數據發送到底層存儲設備。我不確定O_DIRECT。

0

使用JVM無法執行O_DIRECT IO。其中一個原因(我認爲)是,文件內容所在的內存需要對齊到512字節的邊界。分配有ByteBuffers的內存不符合此屬性。

與此512字節對齊相似的另一個問題是,您只能執行512字節倍數的IO操作。所以如果你想讀一個有700字節的文件,你會遇到麻煩。

Here is a similar thread that presents these issues. 我描述了一種方式in my blog how to implement direct IO into the JVM。它還包含一個提示,您可以如何向StandardOpenOption類添加O_DIRECT選項(您必須將該常量添加到JDK源中的文件/src/solaris/native/sun/nio/fs/genUnixConstants.c

相關問題