假設情景:實現Serializable
的Message
類型對象的輸出流。 Message
有會員Header
和Body
。 Header
很小,Body
可能很大。假設我想根據Header
中的信息編寫過濾器:有沒有辦法做到這一點,而不必反序列化Body
?是否有反序列化Java中的對象的一部分的方法?
回答
你可以寫一個自定義的readObject()來只讀取你想要的字段。 如果您只想讀取標題,則需要注意先串行化標題然後再正文。然後在您的自定義readObject()方法中,您可以選擇只讀取第一個元素。
public class Message implements Serializable {
private transient String header;
private transient String body;
...
// custom write object that writes header first and then body
private void writeObject(java.io.ObjectOutputStream oos)
throws IOException {
oos.defaultWriteObject();
// explicitly store the transient fields
oos.writeObject(header);
oos.writeObject(body);
}
private void readObject(java.io.ObjectInputStream ois)
throws IOException, ClassNotFoundException {
ois.defaultReadObject();
// explicitly read in the transient fields
header = (String) ois.readObject();
if (needBody()) { // use some static/thread local variable to set this condition
body = (String) ois.readObject();
}
}
}
通過聲明transient
,您不能序列化身體。
但是,如果您已經序列化了Message對象,則無法有選擇地反序列化特定成員。
在這個構造的例子中,消息主體是有原因的。它攜帶對消費者有用的信息,提供的頭部通過過濾器。 – user443854 2011-12-13 20:38:04
@ user443854:在這種情況下,請參考我的第二點。你不能選擇性反序列化。 – bragboy 2011-12-13 20:38:51
與數據庫相比,您剛剛發現了面向對象編程的一個弱點:「如果我只想要一半Customer對象?」
我想說的是,你需要將你的Message類拆分成類似MessageHeader的東西,包含頭部信息並且沒有引用正文,還有一個MessageBody類,它有一個可以用來查看的主體和一個鍵上傳標題數據。然後,您需要分別存儲和檢索序列化的MessageHeader和MessageBody對象。
- 1. 在Java中反序列化一個序列化的php對象
- 2. 是否有可能在javascript中反序列化java對象
- 3. 的Java GSON序列化和內部HashMap的反序列化對象(鍵,對象)
- 4. 反序列化Java中的JSON對象
- 5. 反序列化Java中的對象
- 6. 部分反序列化XML到對象
- 7. 序列化對象的一部分,JSON
- 8. 序列化對象圖的一部分
- 9. 序列化和反序列化.NET對象的最快方法
- 10. JSON.NET:反序列化JSON對象的一部分,以字典
- 11. 爲什麼JSON序列化返回一個部分反序列化的對象?
- 12. 反序列化的Java對象
- 13. 有沒有一種方法來通過python反序列化java對象
- 14. 無法反序列化對象 - Qt的
- 15. 是否可以序列化/反序列化dojo小部件對象?
- 16. 使用C#序列化Java可反序列化的對象
- 17. Java的「設置對象」,序列化/反序列化
- 18. 序列化,在序列化對象中有很多方法是不好的
- 19. 在Java中的方法中對子類對象進行序列化/反序列化
- 20. Java:什麼是讀取序列化對象的最佳方法?
- 21. 是否有可能將JSON反序列化爲Java中的樹?
- 22. 在java中反序列化JSON的最快方法是什麼
- 23. 是否有可能將JSON部分反序列化爲結構?
- 24. 序列化一個對象和反序列化爲對象
- 25. 這是一個通用反序列化對象的好方法嗎?
- 26. json.net反序列化對象中的datetime
- 27. 反序列化的對象是否保留靜態值?
- 28. 部分xml序列化/反序列化
- 29. 反序列化ISODate對象到Java POJO
- 30. 反序列化多個Java對象
分別序列化它們,存儲兩個對象,只讀第一個對象? – 2011-12-13 20:15:25
假設分手'消息'是不可能的。 – user443854 2011-12-13 20:19:02