[英]Which classes must implement the Serializable interface?
我想通過socket發送一個object,所以我必須實現Serializable。 但是我的 class 是復合 class,就像這個簡單的代碼:
class B{
private int a;
public B(int aa){a=aa;}
}
class A {
private B b;
public A(B b1){ b=b1;}
}
我想發送 class A 的 object,其中包含 B object 等所有內容。 哪些類應該實現 Serializable? 只是A,還是A和B都有?
補充:向量呢? 認為我在 A 中有一個 B 向量,如下所示:
class A {
private Vector bvector;
}
兩個都。 只要A
具有B
類型的非靜態成員並且 1) 變量b
未標記為transient
或 2) class B
不實現可序列化,A 就不能序列化。
如果 class 都不是內部 class ,則可以采用任何一種方式。 在許多情況下更簡單地獨立序列化兩者。 但是序列化 A 通常更快,並且更獨立於版本,而不是 B,在 A 的序列化中包含重新創建 B 所需的信息。
如果一個或兩個都是內部類,那么序列化它們會變得更混亂/更慢,最好將它們的娛樂信息包含在外部 class 中。
當然,當 class 的對象被多個其他對象引用時,您通常別無選擇,只能分別序列化它們。
如果您不使 B 可序列化,您將獲得序列化異常。
您可以序列化 A 的實例,即使 B 未聲明為Serializable
。 對此的要求是
Class A 必須提供以下方法的實現:
private void readObject(ObjectInputStream ois)
private void writeObject(ObjectOutputStream oos)
如果 class B 被聲明為Serializable
Vs 而不是,那么序列化 A 的實例肯定更容易。 如果可以,則可以使默認序列化起作用。
在上述情況下,擁有 B 的Vector
沒有任何區別(它只是增加了另一層結構)。
您可以使用包裝 class 序列化向量,前提是它是另一個可序列化 class 或子 class 向量的字段以更改其序列化。 這個 class 可以鎖定 Vector 以進行序列化和序列化 A 和 B 類。 如果使用這種方法,則不需要添加 Serializable 標記接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.