1. 程式人生 > >10.8-全棧Java筆記:序列化/反序列化的步驟和實例

10.8-全棧Java筆記:序列化/反序列化的步驟和實例

java

本節我們詳細講解10.3節中提到的序列化和反序列化操作。

序列化和反序列化是什麽

當兩個進程遠程通信時,彼此可以發送各種類型的數據。 無論是何種類型的數據,都會以二進制序列的形式在網絡上傳送。比如,我們可以通過http協議發送字符串信息;我們也可以在網絡上直接發送JAVA對象。發送方需要把這個Java對象轉換為字節序列,才能在網絡上傳送;接收方則需要把字節序列再恢復為Java對象。

Java對象轉換為字節序列的過程稱為對象的序列化。把字節序列恢復為Java對象的過程稱為對象的反序列化

對象序列化的作用有如下兩種:

持久化: 把對象的字節序列永久地保存到硬盤上,通常存放在一個文件中;比如:休眠的實現。以後服務器

session管理,hibernate將對象持久化實現。

網絡通信:在網絡上傳送對象的字節序列。比如:服務器之間的數據通信,對象傳遞。

序列化涉及的類和接口

ObjectOutputStream代表對象輸出流,它的writeObject(Object obj)方法可對參數指定的obj對象進行序列化,把得到的字節序列寫到一個目標輸出流中。


ObjectInputStream代表對象輸入流,它的readObject()方法從一個源輸入流中讀取字節序列,再把它們反序列化為一個對象,並將其返回。


只有實現了Serializable接口的類的對象才能被序列化。 Serializable接口是空接口,只起到標記作用。

序列化/反序列化的步驟和實例

【示例1】將類Person的實例進行序列化和反序列化

import java.io.*;

class Person implements Serializable { // Person類實現Serializable接口

int age;

boolean isMan;

String name;

public Person(int age, boolean isMan, String name) {

super();

this.age = age;

this.isMan = isMan;

this

.name = name;

}

}

public class TestSerializable {

public static void main(String[] args) throws IOException,

ClassNotFoundException { //限於篇幅,沒有按照try-catch-finally//方式規範的進行流的關閉操作。實際工作中,一定按照前面所述的標準方式關閉流。

//通過ObjectOutputStreamPerson對象的數據寫入到文件中,即序列化。

Person person = new Person(18, true, "高淇");

FileOutputStream fos = null;

ObjectOutputStream oos = null;

// 序列化

fos = new FileOutputStream("d:/c.txt");

oos = new ObjectOutputStream(fos);

oos.writeObject(person);

oos.flush();

oos.close();

fos.close();

//通過ObjectInputStream將文件中二進制數據反序列化成Person對象:

ObjectInputStream ois = null;

FileInputStream fis = null;

// 反序列化

fis = new FileInputStream("d:/c.txt");

ois = new ObjectInputStream(fis);

Person p = (Person) ois.readObject();

System.out.println(p.name);

fis.close();

ois.close();

}

}




「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。


筆記包含從淺入深的六大部分:

A-Java入門階段

B-數據庫從入門到精通

C-手刃移動前端和Web前端

D-J2EE從了解到實戰

E-Java高級框架精解

F-Linux和Hadoop




本文出自 “12931675” 博客,請務必保留此出處http://12941675.blog.51cto.com/12931675/1944628

10.8-全棧Java筆記:序列化/反序列化的步驟和實例