Java序列化和反序列化
- 序列化:Java對象轉換為字節序列
- 反序列化:字節序列轉換為Java對象
實現了Serializable或Externalnalizable接口的接口或類,通過ObjectInputStream或ObjectOutputStream可以進行二進製文件與Java對象之間的轉換。
Serializable
- 實現了Serializable的對象,可以將該對象的非transient的實例變量進行序列化或反序列化。
- 若重寫了
readObject(ObjectInputStream in)
和writeObject(ObjectOutputSteam out)
方法,則會調用這兩個方法進行序列化或反序列化。
PS:non-transient字段不會參與序列化會反序列化,這樣,有時傳輸數據對象可以節省不必要的時空開銷。
普通序列化
MyObject obj = new MyObject("zou", "male");
// 序列化
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("/user/zoujs/documents/java.obj"));
out.writeObject(obj);
out.close();
// 反序列化
ObjectInputStream in = new ObjectInputStream(new FileOutputStream("/user/zoujs/documents/java.obj"));
MyObject object = (MyObject)in.readObject();
in.close();
結合從前寫的Closeable的文章,可以將代碼寫成如下形式。
// 序列化
MyObject obj = new MyObject("zou", "male");
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("/users/zoujs/documents/java.obj"))){
out.writeObject(obj);
}
// 反序列化
MyObject object;
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("/user/zoujs/documents/java.obj"))){
object = (MyObject)in.readObject();
}
帶 readObject()
和 writeObject()
方法的序列化和反序列化
這兩個方法可以在序列化和反序列化時定製用戶的行為,即使它們被生命為private,但這絲毫不影響它們的作用。
實際上,ObjectInputStream和ObjectOutputStream通過反射來尋找對象是否實現了這兩個方法,
最後更新:2017-08-21 20:02:16
上一篇:
記一次阿裏雲ECS實例預約遷移
下一篇:
Closeable
js動態創建div等元素實例
《Hadoop與大數據挖掘》一2.6 TF-IDF算法原理及Hadoop MapReduce實現
Guava 是個風火輪之基礎工具(2)
JavaEE中使用Filter來實現圖片的防盜鏈
"0x00a1bdb3" 指令引用的 "0x00000001" 內存。該內存不能為 "read"。
《Spring Cloud Netflix》 -- 服務注冊和服務發現-Eureka的常用配置
語音蘭度短信
打造高效前端工作環境-tmuxinator
redis分布式鎖,無須設置有效期,自動檢測hold鎖的節點是否存活
時間、空間、對象 海量極速多維檢索 - 阿裏雲RDS PostgreSQL最佳實踐