我不得不直接讀/寫文件,沒有任何緩衝。在舊的C方式中,我用O_DIRECT
標誌使用了開放方式做了這個。如何以Java方式直接從/向設備讀寫文件(如O_DIRECT標誌的效果)?
這是可能的Java方式?
這裏的O_DIRECT
描述
儘量減少I/O,並從該文件的緩存作用。在一般情況下,這會降低性能,但在特殊的 情況下非常有用,例如應用程序執行自己的緩存時。文件I/O 直接進入/來自用戶空間緩衝區。
更新:
這裏是我的代碼示例,
// write
fos = new FileOutputStream(fileName);
fos.write(inputData);
fos.flush();
fos.close();
// read
fis = new FileInputStream(fileName);
int len = fis.read(outputData, offset, length);
fis.close();
的背景是,我寫SD卡(某種智能卡)上的數據(實際上,命令)到一個文件,然後智能卡接收命令並將結果準備到同一文件。通常情況下,我只能讀取該文件中的數據(結果),但我得到的結果相同inputData
和outputData
,即我剛收到我的命令。這是意想不到的結果。我懷疑代碼是否寫入/讀取緩衝區,而不是真正的文件。沖洗失敗。
如果您不介意緩慢,那麼您可以使用純粹的'FileOutputStream',它幾乎是最低級別,沒有緩衝。當然,你將不得不將所有東西都轉換成byte []或byte,但是它看起來就是你想要做的。 – nhahtdh 2012-07-06 03:12:59
它可能你可以用ndk做到這一點,但爲什麼? – 2012-07-06 07:13:03
@Chris Stratton,當然我知道它可以通過NDK和jni完成,但是我更喜歡用Java來做,因爲它很方便調試,我想知道它是否可能 – fifth 2012-07-06 08:13:03