使用缺省的serializetion的实现时,一个ObjectOutputStream的构造和一个ObjectInputStream的构造必须一一对应.ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头.所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException.一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法.被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,羰?则调用super.writeStreamHeader();若否,即以追加方式写入object时,则应调用ObjectOutputStream.reset()方法. 

解决方案 »

  1.   

    这是我在sun中国论坛上看到的!唉具体怎么做我就不知道了!
      

  2.   

    我该怎么做呢?如何进行写呢?
    UP
    UP
      

  3.   

    manboo(非典型天使) 已经说到啦,就是构造一个自己的ObjectOutputStream和ObjectInputStream,简单的就覆盖writeStreamHeader()方法就行了,其他什么都不用做
      

  4.   

    做一个类 里面是要保存的对象不就行了像一个箱子 里面都是object
      

  5.   

    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();   }
    }
    是这样进行重载吗?
      

  6.   

    好像不行啊!还是会出现错误!我在序列的的writeObject方法中是这样处理的是哪儿错了呢?
    M_ObjectOutputStream moos=new M_ObjectOutputStream(oos);
     moos.defaultWriteObject();
    我在读的时候还是使用ObjectInputStream来读的还是会出现问题!我是在Socket上传递对象的,我很是不明白为什么RMI可以传递我传递的就会出错呢?
      

  7.   

    应该是不需要重载父类方法的
    出现StreamCorruptedException我想有可能是你在关闭ObjectOutputStream之前没有先调用flush方法,致使最后面一段丢失了。你需要调用oos.flush();oos.close()之后才好用那个
    真正的OutputStream
      

  8.   

    ChDw(米) 如果只是传递一个对象是没有问题的,但是我是要连续传递一系列的对象,这样是会造成一些问题的,但是SUN的文档和一些说法太模糊了!
      

  9.   

    米!如果是序列化一个数组,那么是作为一个对象来进行序列化,那么如果是在一个流上序列化多个对象,因为每次都写序列化头造成的问题.我也不知道怎么解决.manboo给的是SUN的答案,但是我怎么都看不懂