接續 Day 13
JSON, XML, CSV 都是很廣泛為人知、多人使用、支援工具很多的 encoding 格式,但不喜歡的人也不少,XML 常常被詬病它的複雜性,不必要的資訊太多了,相較之下 JSON 就比較好懂了,在許多的 web 應用系統中也是內建 JSON 在裡頭,而 CSV 雖然沒這麼強,但它是很多檔案交換時用的格式。
JSON, XML, CSV 都是人肉眼看的懂的文字格式 (XML 就...),儘管他們流行,但還是可能會有以下幾個微妙的問題:
雖然如此,它們在很多資料交換情況下也是相當方便的。
想像一下你需要在內部做 TB 等級的資料交換時,你會直接用 JSON 當文字檔案儲存後給別人用嗎?如果你是用雲端儲存資源,小小的改變也能幫你節省非常多的資料大小,Binary Encoding 就是幫助我們省節資源用的方法;JSON 跟 XML 都有許多 Binary Encoding 的工具,JSON 有 MessagePack, BSON, BJSON, UBJSON, BISON 等等,XML 也有 WBXML, Fast Infoset 等等,
因為 JSON 和 XML 不會特別指定 schema,代表我們在做 Binary Encoding 時勢必要存欄位名稱,以下這串 JSON 為之後所有 encoding 格式的範例:
JSON Example 4-1
{
"userName": "Martin",
"favoriteNumber": 1337,
"interests": ["daydreaming", "hacking"]
}
就來看 MessagePack 怎麼做 Binary Encoding 的吧!
首先要知道的是圖中的內容皆為 16 進位,再來就一步步解析吧!
userName
(使用 ASCII),這裡不需要一個表達字串結束的字元。經過 MessagePack 的 binary encoding 後的大小為 66 位元組,比純粹把 JSON 當文字儲存後的 81 位元組 來的小 (移除空白),所有的 JSON binary encoding 做法都差不多,但明天要講的 encoding 格式檔案大小就只剩 32 位元組 了。