import java.io.*;public class Try
{
  public static void main(String args[]) throws Exception
  {
    FileOutputStream fout=new FileOutputStream("E:\\qq.txt",true);
    ObjectOutputStream oout=new ObjectOutputStream(fout);
    Client client=new Client(8,"hijilmn");
    oout.writeObject(client);
    Client client2=new Client(3,"wuwenyu");
    oout.writeObject(client);
    oout.close();
    fout.close();    FileInputStream fin=new FileInputStream("E:\\qq.txt");
    ObjectInputStream oin=new ObjectInputStream(fin);
    Client client3=(Client)oin.readObject();
    System.out.println(client3);
    client3=(Client)oin.readObject();
    System.out.println(client3);
    oin.close();
    fin.close();
  }
}class Client implements Serializable
{
  public int num;
  public String name;  public Client(int num,String name)
  {
    this.num=num;
    this.name=name;
  }  public String toString()
  {
    return "num="+num+", name="+name;
  }
}
为什么输出的是同一个人名?输出如下:
num=8,name=hijilmn
num=8,name=hijilmn

解决方案 »

  1.   

    Client client3=(Client)oin.readObject(); 
        System.out.println(client3); 
        client3=(Client)oin.readObject(); 
        System.out.println(client3); 
    这两句好像一样啊,都是client3
      

  2.   


     //发表于:2008-11-28 23:27:45 楼主 
    import java.io.*; public class Try 

      public static void main(String args[]) throws Exception 
      { 
        FileOutputStream fout=new FileOutputStream("E:\\qq.txt"); 
        ObjectOutputStream oout=new ObjectOutputStream(fout); 
        Client client1=new Client(8,"hijilmn"); 
        oout.writeObject(client1); 
        Client client2=new Client(3,"wuwenyu"); 
        oout.writeObject(client2); 
        oout.close(); 
        fout.close();     FileInputStream fin=new FileInputStream("E:\\qq.txt"); 
        ObjectInputStream oin=new ObjectInputStream(fin); 
        Client client3=(Client)oin.readObject(); 
        System.out.println(client3); 
        Client client4=(Client)oin.readObject(); 
        System.out.println(client4); 
        oin.close(); 
        fin.close(); 
      } 
    } class Client implements Serializable 

      public int num; 
      public String name;   public Client(int num,String name) 
      { 
        this.num=num; 
        this.name=name; 
      }   public String toString() 
      { 
        return "num="+num+", name="+name; 
      } 

     
     
      

  3.   


    Client client=new Client(8,"hijilmn"); 
        oout.writeObject(client); 
        Client client2=new Client(3,"wuwenyu"); 
        oout.writeObject(client); //client改为client2
      

  4.   


    import java.io.*; public class Try 

      public static void main(String args[]) throws Exception 
      { 
        FileOutputStream fout=new FileOutputStream("E:\\qq.txt",true); 
        ObjectOutputStream oout=new ObjectOutputStream(fout); 
        Client client=new Client(8,"hijilmn"); 
        oout.writeObject(client); 
        Client client2=new Client(3,"wuwenyu"); 
        //很明显,这里错了,两次writeObject都写进的是一样的,改成client2就成了.....
        oout.writeObject(client2); 
        oout.close(); 
        fout.close();     FileInputStream fin=new FileInputStream("E:\\qq.txt"); 
        ObjectInputStream oin=new ObjectInputStream(fin); 
        Client client3=(Client)oin.readObject(); 
        System.out.println(client3); 
        client3=(Client)oin.readObject(); 
        System.out.println(client3); 
        oin.close(); 
        fin.close(); 
      } 
      

  5.   

    我改了怎么是两个名字public class test
    {
      public static void main(String args[]) throws Exception
      {
        FileOutputStream fout=new FileOutputStream("E:\\qq.txt",true);
        ObjectOutputStream oout=new ObjectOutputStream(fout);
        Client client=new Client(8,"hijilmn");
        oout.writeObject(client);
        Client client2=new Client(3,"wuwenyu");
        oout.writeObject(client2);
        oout.close();
        fout.close();    FileInputStream fin=new FileInputStream("E:\\qq.txt");
        ObjectInputStream oin=new ObjectInputStream(fin);
        Client client3=(Client)oin.readObject();
        System.out.println(client3);
        client3=(Client)oin.readObject();
        System.out.println(client3);
        oin.close();
        fin.close();
      }
    }class Client implements Serializable
    {
      public int num;
      public String name;  public Client(int num,String name)
      {
        this.num=num;
        this.name=name;
      }  public String toString()
      {
        return "num="+num+", name="+name;
      }
    } num=8, name=hijilmn
    num=3, name=wuwenyu
      

  6.   

    FileOutputStream fout=new FileOutputStream("E:\\qq.txt"); 
    改成下面的这样:
    FileOutputStream fout=new FileOutputStream("E:\\qq.txt",true);
    这样才能保证下次写入的东西不会覆盖前面写入的东西,当用了true后,就是在你前一次写入的后面添加新的信息而不覆盖原始的信息,如果不写true的话,系统默认为FALSE,覆盖原始的信息!!!
    这个小问题需要多多注意,其实你改不改变client无所谓,因为当你new一个新对象的时候分配的内存地址是不同的,jvm还是能找到相应的对象;当然这样写别人不容易看懂你写的程序,不建议这样写!!!