我有以下用例。
BufferedOutputStream
将某些对象序列化为文件。flush()
如何反序列化此类文件?在反序列化此类文件时,Java将如何表现。
Update1 -
我不确定我的测试是否足够详尽,因此需要进一步的建议。
Update2 - Adam指出了一种方法,可以使用随机截断文件来模拟此类测试。 以下是尝试进行大约100次迭代时观察到的行为 -
StreamCorruptedException
或IOException
。它只会抛出EOFException
指示EOF
并忽略部分对象。答案 0 :(得分:2)
在阅读下一个对象之前,是否对每个对象进行反序列化。它不会受到影响,因为后来的对象编写失败或无法反序列化
答案 1 :(得分:1)
我怀疑你是在滥用java序列化 - 它并不是一种可靠且可恢复的永久存储方式。使用数据库。如果必须,你可以 使用数据库来存储java对象的序列化形式,但这样效率很低。
答案 2 :(得分:0)
是的,手动测试这种情况(通过终止进程)可能很困难。我建议你写一个测试用例:
通过这种方式,您确定要加载损坏的文件并且代码正确处理它。
答案 3 :(得分:-1)
您是否尝试过附加到ObjectOutputStream?您可以找到解决方案HERE,只需找到解释如何使用append创建ObjectOutputStream的帖子。