今天我在java序列化和反序列化中遇到了奇怪的行为("奇怪"因为我不明白)
我正在从linux共享目录中序列化和反序列化一个对象。
序列化一切都没有任何问题,但当我试图反序列化它抛出的同一个文件
java. io. EOFException
。此外,反序列化仅对此新创建的文件失败,并且正在为该目录中的所有其他旧文件工作。
所以我在互联网上搜索并发现一个线程说低磁盘空间也可能导致此错误。
所以我清理了一些临时文件,瞧它工作了。我不明白低磁盘空间只能影响反序列化而不是序列化?
我正在使用apache commons SerializationUtils
类。下面是序列化和反序列化的代码
SerializationUtils. serialize(myObject, new FileOutputStream(new File(sharePath+FILEName) ;
MyObject object=SerializationUtils. deserialize( new FileInputStream(new File(sharePath+FILEName);
如果有人可以解释这种行为,那将非常有帮助。我怀疑它在SerializationUtils中的一个错误可能会吞噬IOException。
由于
答案 0 :(得分:8)
我怀疑在编写文件时,由于磁盘空间已用完而引发了ioexception,但序列化数据的开头仍然写入磁盘。这意味着存储在磁盘上的序列化数据不完整,因此读取它会产生无效结果,在您的情况下会导致EOF异常
为了解决这个问题,您需要查看由于磁盘空间耗尽exception.getMessage()
而引发IO异常的时间,并确保不写入不完整的数据。