对象输出流问题:
怎样能连续向文件中添加对象,并且可以从文件中循环读取出对象?
错误的情况:连续多次调用oos.writeObject(user)向文件中写入对象,然后这样while((user=(User)ois.readObject())!=null)循环取出对象。
出现这种情况的解释:ObjectOutputStream建立后第一次写入一个对象时, 会在对象数据前写入一些标志的数据“ACED0005”。当你关闭ObjectOutputStream后再重新打开往文件里面写对象时(append方式),就会再一次把“ACED0005”写入文件,而这些信息并不是你写入对象的数据,所以当你用ObjectInputStream来读取对象时,流会将除第一个“ACED0005”以外的数据当作各个对象的数据,造成无法解析,所以读取时有一个java.io.StreamCorruptedException异常出现:java.io.StreamCorruptedException: invalid type code: AC
解决办法:那个“AC ED 00 05”是ObjectOutputStream.writeSystemHeader()写进去的,你可以继承ObjectOutputStream类,覆盖这个方法。在你自己的writeSystemHeader()里判断是不是第一次写入一个文件,如果是向一个文件大小不为零的文件追加的话,就调用super.reset(),如果是第一次写这个文件,不是追加,就调用super.write