Java对象序列化的问题,而读对象
问题描述:
我有几个系列化和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
对象?
答
您每次都序列化相同的数据实例。 Java序列化存储对对象的引用,并且当您尝试多次存储同一个实例时,只引用先前的存储(这解决了循环引用问题)。每次创建一个新的数据实例。
答
试试这个:
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();
正如我改变数据值的值,那么它应该保存最后一个值不是第一对象的值。 – 2013-05-01 14:42:15
@AlpeshGediya - 我确实改正了你的理解,我的答案的哪部分你不明白? – jtahlborn 2013-05-01 14:59:05
作为整数是不可变的分类,如果我改变了那些整数的值,那么它们的引用将会不同,所以我应该指向Integer对象的当前值,并且当引用被改变时,它应该存储新的值。 – 2013-05-01 15:03:05