7.1 編碼和解碼的基本介紹
-
編寫網絡應用程序時,因爲數據在網絡中傳輸的都是二進制字節碼數據,在發送數據時就需要編碼,接收數據時就需要解碼
-
codec(編解碼器) 的組成部分有兩個:decoder(解碼器)和 encoder(編碼器)。encoder 負責把業務數據轉換成字節碼數據,decoder 負責把字節碼數據轉換成業務數據
7.2 Netty 本身的編碼解碼的機制和問題分析
-
Netty 自身提供了一些 codec(編解碼器)
-
Netty 提供的編碼器
-StringEncoder,對字符串數據進行編碼
ObjectEncoder,對 Java 對象進行編碼 -
Netty 提供的解碼器
StringDecoder, 對字符串數據進行解碼
ObjectDecoder,對 Java 對象進行解碼 -
Netty 本身自帶的 ObjectDecoder 和 ObjectEncoder 可以用來實現 POJO 對象或各種業務對象的編碼和解碼,底層使用的仍是 Java 序列化技術 , 而Java 序列化技術本身效率就不高,存在如下問題:
1.無法跨語言
2.序列化後的體積太大,是二進制編碼的 5 倍多。
3.序列化性能太低
===> 引出 新的解決方案 [Google 的 Protobuf]
7.3 Protobuf
7.4 Protobuf 快速入門實例
編寫程序,使用 Protobuf 完成如下功能
- 客戶端可以發送一個 Student PoJo 對象到服務器 (通過 Protobuf 編碼)
- 服務端能接收 Student PoJo 對象,並顯示信息(通過 Protobuf 解碼)
7.5 Protobuf 快速入門實例 2
- 編寫程序,使用 Protobuf 完成如下功能
- 客戶端可以隨機發送 Student PoJo/ Worker PoJo 對象到服務器 (通過Protobuf 編碼)
- 服務端能接收 Student PoJo/ Worker PoJo 對象(需要判斷是哪種類型),並顯示信息(通過 Protobuf 解碼)