一、什么是Protocol Buffer?
Protocol Buffer是一種輕便高效的結構化數據存儲格式,可以用于結構化數據序列化,語言中立,平臺中立,可用于通訊協議,數據存儲等方面,目前有兩個版本,分別是proto2和proto3,鑒于proto3還是beta版本,所以使用的較多的還是proto2
優點:
1.序列化速度快,官方說比xml和json快20~100倍
2.體積小,有測試表明數據可以縮小3倍左右
3.多平臺僅需維護一套對象協議文件(.proto)
4.使用在http里面,傳輸內容抓包只能看到的是字節
5.因為體積小,傳輸起來帶寬和速度會有優化
缺點:
1.不適合描述符號文本
2.不如XML易閱讀和編輯
3.需要工具預先生成序列化類
二、安裝
打開終端
安裝Homebrew(Mac OSX上的軟件包管理工具,能在Mac中方便的安裝軟件或者卸載軟件)
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
利用Homebrew工具安裝Protobuf編譯器
brew install protobuf-swift
查看安裝是否安裝成功
protoc --version
出現了對應的版本號就說明安裝成功了
三、使用
3.1下載ProtocolBuffers-Swift框架到你的工程中,我使用了cocoaPods
image.png
3.2創建proto文件
commod+N 創建一個空的文件 我命名為IMMessage.proto
3.3填寫需要序列化的消息類型
image.png
3.4 進入proto當前文件夾 編譯“.proto”文件 可以看到同目錄下多了一個Immessage.proto.swift文件
protoc IMMessage.proto --swift_out="./"
3.5 結構化數據序列化
// 序列化 對象轉二進制
let p = Person.Builder()
p.id = 769215561
p.name = "lky"
p.email = "769215561@qq.com"
guard let per = try? p.build() else { return }
let sendData = per.data()
// 反序列化 二進制轉對象
guard let p2 = try? Person.parseFrom(data: sendData) else{ return }
print("\(p2.id)")
print("\(p2.name)")
print("\(p2.email)")