使用缺省的serializetion的实现时,一个ObjectOutputStream的构造和一个ObjectInputStream的构造必须一一对应.ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头.所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException.一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法.被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,羰?则调用super.writeStreamHeader();若否,即以追加方式写入object时,则应调用ObjectOutputStream.reset()方法.
UP
UP
} public M_ObjectOutputStream(OutputStream out) throws IOException {
super(out); }
protected void writeStreamHeader() throws IOException
{
super.writeStreamHeader(); }
}
是这样进行重载吗?
M_ObjectOutputStream moos=new M_ObjectOutputStream(oos);
moos.defaultWriteObject();
我在读的时候还是使用ObjectInputStream来读的还是会出现问题!我是在Socket上传递对象的,我很是不明白为什么RMI可以传递我传递的就会出错呢?
出现StreamCorruptedException我想有可能是你在关闭ObjectOutputStream之前没有先调用flush方法,致使最后面一段丢失了。你需要调用oos.flush();oos.close()之后才好用那个
真正的OutputStream