中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Protobuf

發布時間:2021-10-18 10:21:01 來源:億速云 閱讀:125 作者:柒染 欄目:web開發

怎么使用Protobuf,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

在以前的文章中,我們講到了什么時候用 Yaml,什么時候用 JSON,什么時候用 Protobuf:

  • 人寫機器讀,用 Yaml

  • 機器寫,人讀,用 JSON

  • 機器寫,機器讀,用 JSON 或者 Protobuf

JSON 作為幾乎每一個語言都支持的序列化格式,在很多地方都得到了廣泛應用。但有個弊端,JSON  里面充斥了大量的大括號、中括號和雙引號,導致冗余的字符太多,數據量非常大,在對傳輸速度有高要求的場景下,數據量越大,占用的傳輸帶寬就越大,單位時間傳輸的數據也就越少。

Protobuf 是 Google 開發的一個二進制序列化格式,與 JSON 相比,Protobuf  的數據非常精簡,甚至連數據的字段名都沒有。例如有這樣一段數據:

a = {'name': 'kingname', 'salary': 99999, 'address': '上海', 'skill': ['Python', '爬蟲', 'Golang']}

如果用 Protobuf 來表示,那么數據的二進制形式是這樣的:

怎么使用Protobuf

這個二進制數據只有值,但沒有字段名,所以要解析這些數據,必須在代碼里面額外把字段名帶上。所以需要定義一個xxx.proto文件,在里面標記每一個字段的信息。在任何時候任何語言中,需要序列化和反序列化的地方,都要提前使用protoc命令,基于這個.proto文件,生成一個xxx_pb2文件,通過從這個  xxx_pb2文件中導入數據對象來對數據進行處理。

因此,我們說,proto 格式,雖然確實精簡了網絡中的數據傳輸量,但卻給開發者增加了相當大的工作量。

而最近,又新出來一種二進制序列化格式:CBOR,它的數據比 JSON 小,但是開發起來又比 Protobuf 簡單得多。

我們來看看使用 CBOR 對上面的數據進行序列化操作。首先在 Python 中安裝CBOR:

python3 -m pip install cbor2

安裝完成以后,我們來對數據進行序列化:

import cbor2 a = {'name': 'kingname', 'salary': 99999, 'address': '上海', 'skill': ['Python', '爬蟲', 'Golang']}  result = cbor2.dumps(a) print(result)

運行效果如下圖所示:

怎么使用Protobuf

注意,打印出來的是二進制數據,不是字符串。可以看到,數據是自帶字段名的,字段名與值之間會有特殊的字符進行分割,CBOR  能夠自動識別這些特殊符號,從而區分字段名和字段值。

經過我的測試,一個150MB 的大 JSON文件,讀入到內存,然后重新通過 CBOR 序列化以后寫文件,這個文件大小可以縮減到60MB  左右。雖然壓縮比例不如 Protobuf,可讀性不如 JSON;但是壓縮比例比 JSON 高,可讀性比 Protobuf 好,而且幾乎不增加額外工作量。

大家在寫微服務或者網站前后端通信的時候,可以考慮試一試 CBOR — Concise Binary Object Representation |  Overview[1]。

看完上述內容,你們掌握怎么使用Protobuf的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南平市| 宁武县| 历史| 清涧县| 咸宁市| 五华县| 兴山县| 平遥县| 黔西县| 清水河县| 阿拉善左旗| 霍林郭勒市| 上虞市| 从化市| 息烽县| 阿鲁科尔沁旗| 千阳县| 时尚| 海淀区| 潜山县| 绵阳市| 墨竹工卡县| 秦安县| 麟游县| 米易县| 六安市| 新竹市| 米脂县| 光山县| 油尖旺区| 亳州市| 辽源市| 双流县| 兴隆县| 孝昌县| 沙河市| 汝州市| 镇雄县| 馆陶县| 卓资县| 宜春市|