2013-05-01 44 views
-1

我有几个系列化和Data对象java.lang.Integer但在使用流Data对象值读取数据的对象,而在java.lang.Integer对象的情况下读取值是否正确不正确读取。Java对象序列化的问题,而读对象

Data.java

public class Data implements Serializable{ 
    private Integer count ; 
    public void setCount(Integer count) { 
     this.count = count; 
     } 
    public Integer getCount() { 
     return count; 
    } 
} 

SerializationTest.java

public class SerializationTest { 
    public static void main(String[] args) { 
     ObjectOutputStream oos = null; 
     ObjectOutputStream oosD = null; 
     ObjectInputStream ois = null; 
     ObjectInputStream oisD = null; 
     try{ 
      oos = new ObjectOutputStream(new FileOutputStream(new File("integer1.dat"),false)); 
      oosD = new ObjectOutputStream(new FileOutputStream(new File("Data1.dat"),false)); 
      Data data = new Data(); 
      data.setCount(10); 
      oos.writeObject(new Integer(10)); 
      oosD.writeObject(data); 

      data.setCount(100); 
      oos.writeObject(new Integer(100)); 
      oosD.writeObject(data); 

      data.setCount(1000); 
      oos.writeObject(new Integer(1000)); 
      oosD.writeObject(data); 
      oos.close(); 
      oosD.close(); 

      ois = new ObjectInputStream(new FileInputStream(new File("integer1.dat"))); 
      System.out.println("Integer output"); 
      System.out.println("First Object : "+ (Integer)ois.readObject());   
      System.out.println("Second Object : "+ (Integer)ois.readObject()); 
      System.out.println("Third Object : "+ (Integer)ois.readObject()); 
      ois.close(); 
      System.out.println("Data output"); 
      oisD = new ObjectInputStream(new FileInputStream(new File("Data1.dat"))); 
      System.out.println("First Object : "+ ((Data)oisD.readObject()).getCount());    
      System.out.println("Second Object : "+ ((Data)oisD.readObject()).getCount()); 
      System.out.println("Third Object : "+ ((Data)oisD.readObject()).getCount()); 
      oisD.close(); 
     } 
     catch(IOException ioe){ ioe.printStackTrace(); } 
     catch(Exception e){ e.printStackTrace(); } 
    } 
} 

输出:

Integer output 
First Object : 10 
Second Object : 100 
Third Object : 1000 
Data output 
First Object : 10 
Second Object : 10 
Third Object : 10 

任何人可以帮助我找出问题与Data对象?

回答

4

您每次都序列化相同的数据实例。 Java序列化存储对对象的引用,并且当您尝试多次存储同一个实例时,只引用先前的存储(这解决了循环引用问题)。每次创建一个新的数据实例。

+0

正如我改变数据值的值,那么它应该保存最后一个值不是第一对象的值。 – 2013-05-01 14:42:15

+0

@AlpeshGediya - 我确实改正了你的理解,我的答案的哪部分你不明白? – jtahlborn 2013-05-01 14:59:05

+0

作为整数是不可变的分类,如果我改变了那些整数的值,那么它们的引用将会不同,所以我应该指向Integer对象的当前值,并且当引用被改变时,它应该存储新的值。 – 2013-05-01 15:03:05

0

试试这个:

 Data data = null; 
     data = new Data(); 
     data.setCount(10); 
     oos.writeObject(new Integer(10)); 
     oosD.writeObject(data); 

     data = new Data(); 
     data.setCount(100); 
     oos.writeObject(new Integer(100)); 
     oosD.writeObject(data); 

     data = new Data(); 
     data.setCount(1000); 
     oos.writeObject(new Integer(1000)); 
     oosD.writeObject(data); 
     oos.close(); 
     oosD.close();