gpt4 book ai didi

java - 为什么序列化的对象与原始对象不同?

转载 作者:行者123 更新时间:2023-11-30 06:49:17 25 4
gpt4 key购买 nike

<分区>

我尝试创建一个程序来比较 2 个对象。如果我创建同一对象的 2 个实例,这 2 个对象是不同的,因为即使它们具有相同的“锡”,它们也是 2 个单独的对象。

但是,在我的例子中,我创建了一个对象,将其序列化,将其反序列化为第二个实例,并将原始对象与副本进行比较。

为什么它们不同?我什至不使用"new"来创建第二个实例。我刚刚阅读了序列化对象...这是我使用的 2 个类:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Main {

public static void main(String[] args) {
File file = new File("something.serial");

//Creation of the 1st object
Something obj1 = new Something();

//Serialization
ObjectOutputStream oos;
try {
oos= new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(file)));
oos.writeObject(obj1);
oos.close();
} catch (IOException e) {
e.printStackTrace();
}

//Second object
Something obj2=null;

//Deserialization
ObjectInputStream ois;
try {
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(file));
ois = new ObjectInputStream(bis);
obj2=(Something)ois.readObject();
ois.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

//Compare
if (obj1.equals(obj2)) {
System.out.println("Same");
} else {
System.out.println("Different : ");
System.out.println(obj1.toString()+" - "+obj2.toString());
}
}
}

和:

import java.io.Serializable;

public class Something implements Serializable {

/**
*
*/
private static final long serialVersionUID = 1L;
public int value = 2;

Something () {

}
}

感谢您的所有回答,这将帮助我理解。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com