黑马程序员技术交流社区

标题: IO一个小问题 [打印本页]

作者: 臧盼    时间: 2012-12-25 18:43
标题: IO一个小问题
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException? 如何解决?


作者: Kevin123    时间: 2012-12-25 23:33
使用缺省的serializetion的实现时,一个ObjectOutputStream的构造和一个ObjectInputStream的构造必须一一对应。O bjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头。因此,多次以追加方式向一个文件 中写入object时,该文件将会包含多个标识头。所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产 生StreamCorruptedException。

一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法。被覆盖后的writeStreamHea der()方法应判断是否为首次向文件中写入object?若是,则调用super.writeStreamHeader();若否,即以追加方式写入object时,则 应调用ObjectOutputStream.reset()方法
希望能帮到楼主
作者: 清水    时间: 2012-12-26 17:07
楼上答得真好,学了一招!
作者: yuchen208    时间: 2012-12-26 19:10
ObjectOutputStream输出对象,该对象必须实现Serializable
是对象在流的传输中按照某种循序进行




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2