作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个程序,需要从仍在写入的文件中读取。
主要问题是:如果使用在单独线程上运行的 InputStream
和 OutputStream
类执行读取和写入,有什么问题和问题为了防止数据损坏,我需要注意哪些边缘情况?
如果有人想知道我是否考虑过其他基于非InputStream
的方法,答案是肯定的,我已经考虑过,但不幸的是,在这个项目中这是不可能的,因为该程序使用的库只能工作与InputStream
和OutputStream
。
此外,一些读者问为什么需要这种复杂性。为什么文件写完后不进行读取?
原因是效率。该程序将执行以下操作
如果我们要等待整个文件传输完毕,这会给实时系统带来巨大的延迟。
最佳答案
使用RandomAccessFile。通过 getChannel 或类似的方式可以使用 ByteBuffer。
您将无法“插入”或“删除”文件的中间部分。出于这样的目的,您原来的方法就可以了,但是使用两个文件。
对于并发性:为了保持同步,您可以维护文件的一个单一对象模型,并在那里进行更改。只有待处理的更改需要保留在内存中,其他分层数据可以根据需要重新读取和重新解析。
关于JavaIO : Reading a file that is still being written,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30910473/
我是一名优秀的程序员,十分优秀!