国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

詳解Java 序列化與反序列化(Serialization)

2024-07-14 08:43:56
字體:
來源:轉載
供稿:網友

一、什么是?為什么需要?

序列化(Serialization)是將對象的狀態信息轉化為可以存儲或者傳輸的形式的過程,反序列化則為其逆過程。

內存的易失性;傳輸需要;一些應用場景中需要將對象持久化下來,以便在需要的時候進行讀取。

二、JDK提供的API

java.io.ObjectOutputStream類的 writeObject(Object obj)方法

java.io.ObjectInputStream類的readObject()方法

對于Serializable,如果沒有重寫 writeObject和readObject,則調用默認的方法

Externalizable繼承了Serializable,多了2個方法:writeExternal和readExternal,用來控制需要序列化哪些字段

三、實現方法

假定一個Person類,實現了Serializable或Externalizable接口

import java.io.Serializable;/** * @Author: pf_xu * @Date: 2019/3/5 12:37 * @Version 1.0 */public class Person implements Serializable { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public String getName() { return name; }}
import java.io.Externalizable;import java.io.IOException;import java.io.ObjectInput;import java.io.ObjectOutput;/** * @Author: pf_xu * @Date: 2019/3/5 13:01 * @Version 1.0 */public class SpecialPerson implements Externalizable { private int age; private String name; public SpecialPerson(){} public SpecialPerson(int age, String name) { this.age = age; this.name = name; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public String getName() { return name; } @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(age); out.writeObject(name); } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { this.age = (Integer) in.readObject(); this.name = (String)in.readObject(); }}
import java.io.*;/** * @Author: pf_xu * @Date: 2019/3/5 12:40 * @Version 1.0 */public class SerializableDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { Person person = new Person(10,"Simon"); ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("object1.out")); oos1.writeObject(person); ObjectInputStream ois1= new ObjectInputStream(new FileInputStream("object1.out")); Person re_person = (Person) ois1.readObject(); System.out.println(re_person.getName()+"---"+re_person.getAge()); SpecialPerson specialPerson = new SpecialPerson(30,"Daniel"); ObjectOutputStream oos2 = new ObjectOutputStream(new FileOutputStream("object2.out")); oos2.writeObject(specialPerson); ObjectInputStream ois2= new ObjectInputStream(new FileInputStream("object2.out")); SpecialPerson re_specialPerson = (SpecialPerson)ois2.readObject(); System.out.println(re_specialPerson.getName()+"---"+re_specialPerson.getAge()); }}

  四、一些細節

1.序列化ID

serialVersionUID  如果兩個類的ID不同,則不能互相序列與反序列(可應用與版本控制,不同版本的類相互兼容或者不兼容)

2.安全性

由于其標準化導致其有泄露的風險(二進制明文,可采用加密的方法)

以上所述是小編給大家介紹的Java序列化和反序列化詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新乡县| 广元市| 三都| 华容县| 长沙县| 瑞昌市| 中牟县| 平阴县| 阳谷县| 罗源县| 新疆| 济宁市| 肥东县| 永昌县| 时尚| 新晃| 托里县| 涿州市| 河北省| 蓝田县| 修文县| 大丰市| 蚌埠市| 福贡县| 镇远县| 抚顺县| 庆城县| 浦城县| 酒泉市| 杭州市| 山西省| 青川县| 应城市| 三穗县| 汉寿县| 廊坊市| 酉阳| 成安县| 辉县市| 高青县| 南江县|