【发布时间】:2012-05-23 07:41:14
【问题描述】:
Process-A 使用 FileOutputStream 将字节写入数据文件。 Process-B 使用 DataInputStream 从同一个数据文件中读取数据。
数据文件驻留在不支持 FileLocks 的 NFS 挂载上,因此使用以下方法:
进程-A 创建一个锁定文件来通知进程-B 它可以开始读取数据文件。它在刷新并关闭 FileOutputStream 后创建锁定文件。 Process-B 检查锁定文件是否存在,然后开始读取数据文件。但是,有时它会遇到 EOFException。
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:180)
at java.io.DataInputStream.readUTF(DataInputStream.java:592)
at java.io.DataInputStream.readUTF(DataInputStream.java:547)
java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at java.io.DataInputStream.readFloat(DataInputStream.java:429)
有人可以解释一下,出了什么问题吗?另外,鉴于我不能使用 FileLock api,还有其他替代方法吗?
【问题讨论】:
-
也许您可以展示用于写入和读取这些流的代码?
-
我没有粘贴任何代码,因为它是使用 fileoutputstream 和 datainputstream 的标准文件 i/o 代码,没有什么不寻常的。仅在 2 个不同的过程中完成。
标签: java linux file eofexception