jackson序列化與反序列化的應用實踐
阿新 • • 發佈:2020-09-14
# jackson序列化與反序列化的應用實踐
原始碼地址:
https://github.com/zhouweixin/serializable
## 1 相關概念
1. 序列化: 把物件轉換為位元組序列的過程稱為物件的序列化
2. 反序列化: 把位元組序列恢復為物件的過程稱為物件的反序列化
## 2 序列化的作用
1. 用於把記憶體中的物件狀態儲存到一個檔案中或者資料庫中
2. 用於網路傳送物件
3. 用於遠端呼叫傳輸物件
## 3 準備序列化物件
準備了兩個類, 教師類和學生類, 其中一個學生只有一個教師
這裡省略了構造方法和setter, getter方法
Teacher.java
```java
public class Teacher {
private String name;
private Integer age;
}
```
Student.java
```java
package org.zwx;
public class Student {
private String name;
private Integer age;
private Sex sex;
private String fatherName;
private Date bornTime;
private Teacher teacher;
}
```
Sex.java
```java
public enum Sex {
MALE("男"), FEMALE("女");
private String name;
Sex(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
```
## 4 引入jackson依賴
本示例是基於gradle的, 從maven中心倉庫中選擇了2.11.2版本的jackson-databind
```
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.2'
```
## 5 序列化與格式化輸出
### 5.1 流程
1. 首先需要有一個待序列化物件, 本例中的student物件
2. 建立一個物件對映器, jackson包下的ObjectMapper
3. 呼叫序列化函式, 本例中的writeValueAsString, 將物件轉為字串, 便於展示
### 5.2 程式碼
```java
public void testSerializable() throws IOException {
Student student1 = new Student("小明", 18, Sex.MALE, "王富貴", new Date(), new Teacher("李老師", 40));
Student student2 = new Student("小花", 16, Sex.FEMALE, "錢很多", new Date(), new Teacher("趙老師", 38));