我运行以下代码会出现这样的异常StreamCorruptedExceptionimport java.io.*;
import java.io.FileOutputStream;class user implements  java.io.Serializable
{
    String name;
    String sex;
    String address;
}
public class stream {
    public stream() 
    {
    }
    public static void main(String[] args)
    {
        new stream();
        user objuser = new user();
        objuser.name="wangyuting";
        objuser.sex="gril";
        objuser.address="chengdu";
        user objuser1 = new user();
        objuser1.name="wangyuting116";
        objuser1.sex="gril";
        objuser1.address="chengdu";       
        try
        {
        ObjectOutputStream oop=new ObjectOutputStream(new FileOutputStream("client1.txt",true));
        oop.writeObject(objuser);
        oop.close();
        ObjectOutputStream oops=new ObjectOutputStream(new FileOutputStream("client1.txt",true));
        oops.writeObject(objuser1);   
        oops.close();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        
        
        try{
                    ObjectInputStream oip=new ObjectInputStream(new FileInputStream("client1.txt"));
                    user obj=(user)oip.readObject();
                    System.out.println(obj.name);
                    System.out.println(obj.sex);
                    System.out.println(obj.address);
                    obj=(user)oip.readObject(); 
                    System.out.println();
                    System.out.println(obj.name);
                    System.out.println(obj.sex);
                    System.out.println(obj.address);
        }
         catch(ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
}
当两个对象是一次写如文件时,两个对象都可以读出来;但是如果是一次写一个的话,就只能读出第一个对象,而且读第二个对象的时候就会出现StreamCorruptedException
诚请各位高手给我一个具体的解决方法吧!

解决方案 »

  1.   

    我写文件的时候是用的追加,所以不会覆盖前面所写的.而且我打开client1.txt 里面的确有两个对象
    我现在找到原因了,原因和解决方法如下:
        使用缺省的serializetion的实现时,一个ObjectOutputStream的构造和一个ObjectInputStream的构造必须一一对应.ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.因此,多次以追加方式向一个文件中写入object时,该文件将会包含多个标识头.所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException.
        一种解决方法是可以构造一个ObjectOutputStream的子类,并覆盖writeStreamHeader()方法.被覆盖后的writeStreamHeader()方法应判断是否为首次向文件中写入object,若是,则调用super.writeStreamHeader();若否,即以追加方式写入object时,则应调用ObjectOutputStream.reset()方法.