我有點困惑你的問題 - 也許是因爲我沒有看到任何問題與相同的對象和/或多個對象的序列化和反序列化,有或沒有任何對象的引用。
重點是序列化就像創建對象的副本(在文件系統或某處)。這個副本可以在內存中重新創建(反序列化)。 您可以在內存中創建對象(反序列化)一次或多次。
它是這樣的:
object A --serialization--> file A
file A --deserialization--> object A'
file A --deserialization--> object A"
對象A,A」和A」是不同的對象 - 但所有字段將擁有相同的價值觀。
如果對象A包含一個複雜的結構(可以序列化/反序列化),它也可以是另一個對象,那麼同樣的機制也可以用於這些對象。
所有字段將具有相同的值,但對象將不同。
看的示例代碼:
package test;
import java.io.Serializable;
public class Person implements Serializable {
int id;
String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
}
和一種測試
package test;
import java.io.*;
public class Main {
public static void main(String... args) {
Person p1 = new Person(1, "aaa");
Person p1a = null;
Person p1b = null;
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.data"))) {
oos.writeObject(p1);
} catch (IOException e) {
e.printStackTrace();
}
try (ObjectInputStream oos = new ObjectInputStream(new FileInputStream("test.data"))) {
p1a = (Person) oos.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try (ObjectInputStream oos = new ObjectInputStream(new FileInputStream("test.data"))) {
p1b = (Person) oos.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
assert p1a != null && p1b != null;
assert p1a.id == p1b.id;
assert p1.id == p1b.id;
assert p1.name.equals(p1a.name);
assert p1a.name.equals(p1b.name);
System.out.println(String.format("Three different object: %s, %s, %s", p1, p1a, p1b));
}
}
PS的。 java.lang.String
如何在內存中複製/存儲/管理對象,這是不同的故事。
來源
2017-09-27 08:01:27
THM
您必須使用Person的集合並對其進行序列化。 –