自定义的序列化问题StreamCorruptedException

lifejoy 2003-09-10 04:52:16
在序列化写入的的时候没有任何的,问题!但是在读入的时候发生StreamCorruptedException,我是在一个文件中保存多个对象,为什么会发生这种错误呢?
...全文
81 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lifejoy 2003-09-13
米!如果是序列化一个数组,那么是作为一个对象来进行序列化,那么如果是在一个流上序列化多个对象,因为每次都写序列化头造成的问题.我也不知道怎么解决.manboo给的是SUN的答案,但是我怎么都看不懂
回复
ChDw 2003-09-12
我试过连续压100~200个数组中的对象到流中都不会出现任何问题,我觉得还是你的代码写的有问题
回复
lifejoy 2003-09-12
ChDw(米) 如果只是传递一个对象是没有问题的,但是我是要连续传递一系列的对象,这样是会造成一些问题的,但是SUN的文档和一些说法太模糊了!
回复
ChDw 2003-09-12
应该是不需要重载父类方法的
出现StreamCorruptedException我想有可能是你在关闭ObjectOutputStream之前没有先调用flush方法,致使最后面一段丢失了。你需要调用oos.flush();oos.close()之后才好用那个
真正的OutputStream
回复
lifejoy 2003-09-12
好像不行啊!还是会出现错误!我在序列的的writeObject方法中是这样处理的是哪儿错了呢?
M_ObjectOutputStream moos=new M_ObjectOutputStream(oos);
moos.defaultWriteObject();
我在读的时候还是使用ObjectInputStream来读的还是会出现问题!我是在Socket上传递对象的,我很是不明白为什么RMI可以传递我传递的就会出错呢?
回复
lifejoy 2003-09-12
public class M_ObjectOutputStream extends ObjectOutputStream {

public M_ObjectOutputStream() throws IOException, SecurityException {
}

public M_ObjectOutputStream(OutputStream out) throws IOException {
super(out);

}
protected void writeStreamHeader() throws IOException
{
super.writeStreamHeader();

}
}
是这样进行重载吗?
回复
lifejoy 2003-09-11
UP
回复
lifejoy 2003-09-11
UP
回复
lifejoy 2003-09-11
我该怎么做呢?如何进行写呢?
UP
UP
回复
jokerjava 2003-09-11
做一个类 里面是要保存的对象不就行了

像一个箱子 里面都是object
回复
三合一 2003-09-11
manboo(非典型天使) 已经说到啦,就是构造一个自己的ObjectOutputStream和ObjectInputStream,简单的就覆盖writeStreamHeader()方法就行了,其他什么都不用做
回复
manboo 2003-09-10
这是我在sun中国论坛上看到的!唉具体怎么做我就不知道了!
回复
manboo 2003-09-10
天使!如何判断是第一次写入呢>?
回复
pqds 2003-09-10
上面说得没错!◎
序列的写入和读取是一一对应的!
应该完全按照你写入的顺序来读取!
回复
manboo 2003-09-10
使用缺省的serializetion的实现时,一个ObjectOutputStream的构造和一个ObjectInputStream的构造必须一一对应.ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头.所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException.一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法.被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,羰?则调用super.writeStreamHeader();若否,即以追加方式写入object时,则应调用ObjectOutputStream.reset()方法.
回复
相关推荐
发帖
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2003-09-10 04:52
社区公告
暂无公告