Java的序列化流和反序列化流
阿新 • • 發佈:2021-07-17
Java的序列化流和反序列化流
序列化:利用ObjectOutputStream,把物件的資訊,按照固定的格式轉成一串位元組值輸出並持久儲存到磁碟
反序列化:利用ObjectInputStream,讀取磁碟中之前序列化好的資料,重新恢復成物件
package com.cnblogs; import java.io.*; /* 本類用於測試序列化和反序列化 */ /* 序列化:是指把程式中的Java物件,永久儲存到磁碟中,相當於寫出的過程對應流的方向:out,對應的序列化流為: ObjectOutputStream 反序列化:是指把之前已經序列化的在檔案中儲存的資料,讀取/恢復到程式對應流的方向:in,對應的反序列化流為: ObjectInputStream */ public class TestSerializable { public static void main(String[] args) { method();//序列化 method2();//反序列化 } private static void method() { ObjectOutputStream out = null; try { out = new ObjectOutputStream(new FileOutputStream("E:\\ready\\1.txt")); System.out.println("序列化成功!!!"); Student student = new Student("柒",21,"泰州",'男'); out.writeObject(student);//傳入物件 } catch (IOException e) { System.out.println("很抱歉,序列化失敗!!!"); e.printStackTrace(); } finally { try { out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } } private static void method2() { ObjectInputStream in = null; try { in = new ObjectInputStream(new FileInputStream("E:\\ready\\1.txt")); Object o = in.readObject(); System.out.println(o); System.out.println("反序列化成功!!!"); } catch (Exception e) { System.out.println("反序列化失敗!!!"); e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
package com.cnblogs; import java.io.Serializable; /* 本類用於封裝學生類 */ /* 如果本類想完成序列化,必須實現可序列化介面,否則會報錯: NotSerializableException: cn.tedu.serializable.Student Serializable介面是一個空介面,裡面一個方法都沒有, 作用用來標記,標記這個類物件可以被序列化輸出 */ public class Student implements Serializable{ // private static final long serialVersionUID = 1l; 手動寫的UID private String name;//姓名 private int age;//年齡 private String addr;//住址 private char gender;//性別 public Student() { System.out.println("我是student類的無參構造"); } public Student(String name, int age, String addr, char gender) { System.out.println("我是student類的全參構造"); this.name = name; this.age = age; this.addr = addr; this.gender = gender; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } public char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } //重寫toString方法 @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", addr='" + addr + '\'' + ", gender=" + gender + '}'; } }