低磁盘 space 会导致 java。 io。 EOF异常

How low disk space can cause java. io. EOFException

今天我在java序列化和反序列化中遇到了奇怪的行为("strange"因为我不明白)

我正在对 linux 共享目录中的对象进行序列化和反序列化。 虽然序列化一切都没有任何问题,但是当我试图反序列化同一个文件时它抛出 java. io. EOFException。此外,反序列化仅对这个新创建的文件失败,并且对该目录中的所有其他旧文件有效。

所以我在互联网上搜索,发现一个线程说低磁盘 space 也可能是这个错误的原因。

所以我清理了一些临时文件,瞧,它起作用了。我不明白低磁盘space怎么只能影响反序列化而不影响序列化?

我正在使用 apache commons SerializationUtils class。下面是序列化和反序列化的代码

SerializationUtils. serialize(myObject, new FileOutputStream(new File(sharePath+FILEName) ;


MyObject object=SerializationUtils. deserialize( new FileInputStream(new File(sharePath+FILEName);

如果有人能解释这种行为,那将非常有帮助。我怀疑它是 SerializationUtils 中的一个错误,可能会吞噬 IOException。

谢谢

我怀疑是写文件的时候抛出了ioexception,因为磁盘space已经运行出来了,但是序列化数据的开头还是写入了磁盘。这意味着存储在磁盘上的序列化数据不完整,因此读取它会产生无效结果,在您的情况下会导致 EOF Exception

为了解决这个问题,需要看什么时候因为磁盘space运行ning out with exception.getMessage()而抛出IO异常,确保不要写入数据不全。