fif*_*fth 15 java file-io android
我必须直接读/写文件,没有任何缓冲.在旧的C方式中,我通过使用带O_DIRECT标志的open方法来做到这一点.
这有可能用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();
Run Code Online (Sandbox Code Playgroud)
背景是我将数据(实际上是命令)写入SD卡(某种智能卡)上的文件,然后智能卡接收命令并将结果准备到同一文件.通常情况下,我可以从文件中读取数据(结果),但我得到了同样的inputData和outputData,即,我只是得到我的命令了.这是意想不到的结果.我怀疑代码是否只是写入/读取缓冲区,而不是真实文件.Flush无法正常工作.
FileOutputStream 的 android 文档明确指出它是一个无缓冲的流。无论如何,flush() 和 close() 应该可以解决问题。在 close() 之前您可能需要执行的唯一附加步骤是 getFD().sync()。
您提到了智能卡,因此该设备实现了自己的(假)文件系统,对主机来说显示为 SD 卡等。该卡的文档是否说明您应该给该卡多长时间才能注意到文件的更改?在块 I/O 级别,没有相应的“打开”或“关闭”操作,因此设备应该注意到字节的写入。
或者,如果设备“聪明”并使用文件元数据上的时间更改,则您可能需要调用 File.setLastModified(System.currentTimeMillis()) 来手动“触摸”文件。假设类似 sd 的设备安装了“noatime”选项以提高性能。
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |