MessgePack和Json都是常見的數據交換格式。Json更常見一些,MessagePack與之類似,但是更小更快。
參見官方解釋圖:
上面是原始json,27個字節。
下面是用MessagePack打包過的信息,主要思想就是將json中一些重複出現的符號(如括號、冒號、逗號等)用更精簡的方式來表示。具體在這個例子中,用82表示有兩個map,A7表示一個7字節的字段,C3表示true,00表示整數0。經過打包,大小由27字節縮減爲18字節。
MessgePacker和Json在使用中的另一點不同是,MessagePacker對class的一致性要求更高。例如,打包和解包用到的class所有字段必須完全一致,如果發生字段的增刪,則解包一定失敗;而Json則不會,反序列化時只要保證json和class中存在同名字段,即可自動填充。
在實際的遊戲開發過程中,使用MessagePack可以減小數據的傳輸量,因此較多用在前後端通信,或者服務器與服務器之間的RPC通信中。常用的還有protobuf,本質上都是一種二進制的數據交換方式。