我想将多个对象写入文件,但问题是我没有一次写入所有对象。我必须写一个对象,然后关闭文件,然后可能在一段时间后我想将另一个对象添加到同一个文件。
我目前正在这样做
FileOutputStream("filename", true)
这样它就会将对象附加到文件末尾而不会覆盖它。但是我得到了这个错误:
java.io.StreamCorruptedException:无效的类型代码:AC
任何想法如何解决这个问题?
谢谢,
答案 0 :(得分:3)
一种选择是将文件分段为单个邮件。如果要编写邮件,请先将其序列化为ByteArrayOutputStream
。然后打开文件以附加DataOutputStream
- 用writeInt
写下长度,然后写入数据。
当您从流中阅读时,您需要使用DataInputStream
打开它,然后重复调用readInt
以查找下一条消息的长度,然后readFully
来阅读消息本身。将邮件放入ByteArrayInputStream
,然后从中反序列化。
或者,使用比内置Java序列化更好的序列化格式 - 我是Protocol Buffers的粉丝,但有很多替代品可用。内置的序列化对我来说太脆弱了。
答案 1 :(得分:2)
您不能将不同的ObjectOutputStreams附加到同一文件中。您必须使用不同形式的序列化,或者读取文件并将所有对象和新对象写入新文件。
答案 2 :(得分:2)
您需要serialize
/ deserialize
List<T>
。看一下this stackoverflow线程。