2013-05-01 75 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();