**问题描述:**使用ObjectOutputStream向同一个文件写入多个对象,当每写入一个对象即关闭ObjectOutputStream并在写入下一个对象时重新打开,通过ObjectInputStream读取对象时,可以正常读取第一个对象,但读取第二个对象时报错。报错信息如下:
Exception in thread "main" java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at com.io.ObjectIOTest.readObject(ObjectIOTest.java:49)
at com.io.ObjectIOTest.main(ObjectIOTest.java:40)
后来经过查询发现:
创建ObjectOutputStream对象时,会向输出流中写入标志数据“AC ED 00 05”;由于ObjectOutputStream创建了两次,因此写入第二个对象时,会再次添加标志数据;ObjectInputStream仅能解析第一个对象前的标志数据,后面的标志数据当作对象数据处理,导致处理错误。要想避免这种问题,我们只能创建一个ObjectOutputStream,然后依次读两个对象即可。