国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 原平市| 曲水县| 军事| 西安市| 定日县| 通辽市| 五河县| 科尔| 无为县| 云安县| 贵溪市| 泰来县| 锡林浩特市| 深泽县| 阜康市| 车险| 甘洛县| 阳朔县| 勐海县| 新化县| 东源县| 松桃| 蓝山县| 济阳县| 平南县| 胶南市| 吴江市| 湖口县| 兖州市| 金堂县| 叙永县| 常熟市| 和田市| 来安县| 榆树市| 凤翔县| 丹阳市| 阜阳市| 清水河县| 广东省| 临邑县|