最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Protocol Buffers(Protobuf)功能及使用方法

 更新時(shí)間:2025年01月23日 09:40:34   作者:old_power  
本文介紹了ProtocolBuffers(Protobuf)及其編譯器protoc,包括其數(shù)據(jù)描述語(yǔ)言的特性、編譯器的功能、.proto文件的定義、使用方法、支持的編程語(yǔ)言、安裝步驟、常用命令選項(xiàng)以及高級(jí)功能,感興趣的朋友跟隨小編一起看看吧

Protocol Buffers(Protobuf) 是Google公司開(kāi)發(fā)的一種數(shù)據(jù)描述語(yǔ)言,類似于XML能夠?qū)⒔Y(jié)構(gòu)化數(shù)據(jù)序列化,可用于數(shù)據(jù)存儲(chǔ)、通信協(xié)議等方面。
protocProtocol Buffers(Protobuf) 的編譯器,用于將 .proto 文件中定義的數(shù)據(jù)結(jié)構(gòu)編譯成目標(biāo)編程語(yǔ)言的代碼。Protocol Buffers 是 Google 開(kāi)發(fā)的一種高效、跨語(yǔ)言的數(shù)據(jù)序列化格式,廣泛用于通信協(xié)議、數(shù)據(jù)存儲(chǔ)等領(lǐng)域。protoc 是使用 Protobuf 的核心工具。

1. Protocol Buffers 簡(jiǎn)介

Protocol Buffers 是一種二進(jìn)制序列化格式,具有以下特點(diǎn):

  • 高效:比 XML 和 JSON 更小、更快。
  • 跨語(yǔ)言:支持多種編程語(yǔ)言(如 C++, Java, Python, Go 等)。
  • 可擴(kuò)展:支持向后和向前兼容的字段更新。
  • 結(jié)構(gòu)化:通過(guò) .proto 文件定義數(shù)據(jù)結(jié)構(gòu)。

2. protoc 的功能

protoc 的主要功能是將 .proto 文件編譯成目標(biāo)語(yǔ)言的代碼,生成的代碼包括:

  • 數(shù)據(jù)結(jié)構(gòu)的類或結(jié)構(gòu)體定義。
  • 序列化和反序列化方法。
  • 其他輔助方法(如字段訪問(wèn)、初始化等)。

3. .proto 文件

.proto 文件是 Protocol Buffers 的核心,用于定義數(shù)據(jù)結(jié)構(gòu)和消息格式。以下是一個(gè)簡(jiǎn)單的 .proto 文件示例:

syntax = "proto3";  // 使用 proto3 語(yǔ)法
message Person {
  string name = 1;  // 字段編號(hào)必須唯一
  int32 id = 2;
  string email = 3;
}
  • syntax:指定使用的 Protobuf 語(yǔ)法版本(proto2proto3)。
  • message:定義數(shù)據(jù)結(jié)構(gòu),類似于類或結(jié)構(gòu)體。
  • 字段類型:如 string、int32bool 等。
  • 字段編號(hào):每個(gè)字段的唯一標(biāo)識(shí)符,用于二進(jìn)制編碼。

4. 使用 protoc 編譯 .proto 文件

protoc 的基本命令格式如下:

protoc --<language>_out=<output_dir> <proto_file>
  • --<language>_out:指定目標(biāo)語(yǔ)言和輸出目錄。例如:
  • --cpp_out 生成 C++ 代碼。
  • --java_out 生成 Java 代碼。
  • --python_out 生成 Python 代碼。
  • <output_dir>:生成的代碼的輸出目錄。
  • <proto_file>:輸入的 .proto 文件。

示例

假設(shè)有一個(gè) example.proto 文件,生成 Python 代碼:

protoc --python_out=. example.proto

這將生成 example_pb2.py 文件,供 Python 項(xiàng)目使用。

5. 支持的編程語(yǔ)言

protoc 支持多種編程語(yǔ)言,包括但不限于:

  • C++
  • Java
  • Python
  • Go
  • JavaScript
  • Ruby
  • C#
  • PHP
  • Dart
  • Kotlin

每種語(yǔ)言需要安裝對(duì)應(yīng)的 Protobuf 運(yùn)行時(shí)庫(kù)。

6. 安裝protoc

在 Linux 上安裝

使用包管理器安裝:

sudo apt-get install protobuf-compiler  # Ubuntu/Debian
sudo yum install protobuf-compiler      # CentOS/RHEL

在 macOS 上安裝

使用 Homebrew 安裝:

brew install protobuf

在 Windows 上安裝

7. 常用命令選項(xiàng)

  • --cpp_out:生成 C++ 代碼。
  • --java_out:生成 Java 代碼。
  • --python_out:生成 Python 代碼。
  • --go_out:生成 Go 代碼。
  • --include_imports:包含所有依賴的 .proto 文件。
  • --proto_path:指定 .proto 文件的搜索路徑。

8. 示例:完整使用流程

步驟 1:定義 .proto 文件

創(chuàng)建 person.proto 文件:

syntax = "proto3";
message Person {
  string name = 1;
  int32 id = 2;
  string email = 3;
}

步驟 2:編譯 .proto 文件

生成 Python 代碼:

protoc --python_out=. person.proto

執(zhí)行 protoc --python_out=. person.proto 后,會(huì)生成 person_pb2.py 文件,內(nèi)容類似于:

# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: person.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
class Person(_message.Message):
    __slots__ = ['name', 'id', 'email']
    NAME_FIELD_NUMBER = 1
    ID_FIELD_NUMBER = 2
    EMAIL_FIELD_NUMBER = 3
    ...

步驟 3:在 Python 中使用生成的代碼

生成的 person_pb2.py 文件包含一個(gè) Person 類,可以直接在 Python 代碼中使用。

import person_pb2  # 導(dǎo)入生成的模塊
# 創(chuàng)建一個(gè) Person 對(duì)象
person = person_pb2.Person()
person.name = "John Doe"
person.id = 1234
person.email = "johndoe@example.com"
# 序列化(將對(duì)象轉(zhuǎn)換為二進(jìn)制數(shù)據(jù))
serialized_data = person.SerializeToString()
print("Serialized data:", serialized_data)
# 反序列化(將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為對(duì)象)
new_person = person_pb2.Person()
new_person.ParseFromString(serialized_data)
# 訪問(wèn)反序列化后的數(shù)據(jù)
print("Name:", new_person.name)
print("ID:", new_person.id)
print("Email:", new_person.email)
  • SerializeToString():將消息對(duì)象序列化為二進(jìn)制字符串。
  • ParseFromString(data):將二進(jìn)制字符串反序列化為消息對(duì)象。
  • 字段訪問(wèn):通過(guò) . 操作符訪問(wèn)消息字段(如 person.name)。

運(yùn)行結(jié)果

Serialized data: b'\n\x08John Doe\x10\xd2\t\x1a\x10johndoe@example.com'
Name: John Doe
ID: 1234
Email: johndoe@example.com

9. 高級(jí)功能

  • 嵌套消息:在 message 中定義嵌套的 message。
  • 枚舉類型:定義枚舉字段。
  • Oneof:指定一組字段中只能有一個(gè)字段被設(shè)置。
  • Map:定義鍵值對(duì)字段。
  • RPC 服務(wù):定義 gRPC 服務(wù)接口。

10. 總結(jié)

protoc 是 Protocol Buffers 的核心工具,用于將 .proto 文件編譯成目標(biāo)語(yǔ)言的代碼。它支持多種編程語(yǔ)言,生成的代碼高效且易于使用。通過(guò) Protocol Buffers,開(kāi)發(fā)者可以輕松實(shí)現(xiàn)跨語(yǔ)言的數(shù)據(jù)序列化和通信。

到此這篇關(guān)于Protocol Buffers(Protobuf)簡(jiǎn)介的文章就介紹到這了,更多相關(guān)Protocol Buffers Protobuf 簡(jiǎn)介內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django 限制用戶訪問(wèn)頻率的中間件的實(shí)現(xiàn)

    Django 限制用戶訪問(wèn)頻率的中間件的實(shí)現(xiàn)

    這篇文章主要介紹了Django 限制用戶訪問(wèn)頻率的中間件的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • pytorch 模型的train模式與eval模式實(shí)例

    pytorch 模型的train模式與eval模式實(shí)例

    今天小編就為大家分享一篇pytorch 模型的train模式與eval模式實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python打包工具PyInstaller的安裝與pycharm配置支持PyInstaller詳細(xì)方法

    Python打包工具PyInstaller的安裝與pycharm配置支持PyInstaller詳細(xì)方法

    這篇文章主要介紹了Python打包工具PyInstaller的安裝與pycharm配置支持PyInstaller詳細(xì)方法,需要的朋友可以參考下
    2020-02-02
  • python面向?qū)ο笾惖睦^承詳解

    python面向?qū)ο笾惖睦^承詳解

    這篇文章主要介紹了python面向?qū)ο笾惖睦^承詳解,通過(guò)概述定義講解了類的繼承的功能和創(chuàng)建方式,寫(xiě)出了代碼實(shí)例供參考,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 從基礎(chǔ)到高階詳解Python內(nèi)聯(lián)回調(diào)函數(shù)的完整指南

    從基礎(chǔ)到高階詳解Python內(nèi)聯(lián)回調(diào)函數(shù)的完整指南

    在異步編程和事件驅(qū)動(dòng)編程中,回調(diào)函數(shù)是一種常見(jiàn)的編程模式,本文將基于Python的核心內(nèi)容,結(jié)合現(xiàn)代Python特性,全面解析內(nèi)聯(lián)回調(diào)函數(shù)的技術(shù)細(xì)節(jié),感興趣的小伙伴可以了解下
    2025-10-10
  • pandas如何讀取mysql數(shù)據(jù)

    pandas如何讀取mysql數(shù)據(jù)

    這篇文章主要介紹了pandas如何讀取mysql數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python調(diào)用Ollama庫(kù)本地大語(yǔ)言模型使用詳解

    Python調(diào)用Ollama庫(kù)本地大語(yǔ)言模型使用詳解

    ollama是一個(gè)用于調(diào)用本地大語(yǔ)言模型的Python庫(kù),提供了簡(jiǎn)單、高效的API接口,下面文章詳細(xì)介紹了如何安裝、使用、設(shè)置自定義參數(shù)、集成流式生成、錯(cuò)誤處理以及與其他工具集成,需要的朋友可以參考下
    2025-02-02
  • 重構(gòu)Python代碼的六個(gè)實(shí)例

    重構(gòu)Python代碼的六個(gè)實(shí)例

    這篇文章主要給大家介紹了關(guān)于重構(gòu)Python代碼的六個(gè)實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python常用模塊用法分析

    Python常用模塊用法分析

    這篇文章主要介紹了Python常用模塊用法分析,主要包括內(nèi)置函數(shù)、文件操作、正則匹配等等,需要的朋友可以參考下
    2014-09-09
  • python 發(fā)送郵件的示例代碼(Python2/3都可以直接使用)

    python 發(fā)送郵件的示例代碼(Python2/3都可以直接使用)

    這篇文章主要介紹了python 發(fā)送郵件的示例代碼,并且Python2/3都可以直接使用,感興趣的朋友可以參考下
    2020-12-12

最新評(píng)論

铁岭市| 自治县| 巴东县| 娄烦县| 会宁县| 江华| 虞城县| 安乡县| 瑞安市| 东丽区| 达尔| 舟曲县| 安义县| 鹰潭市| 文化| 永平县| 藁城市| 永年县| 平阳县| 广丰县| 临海市| 桦川县| 岢岚县| 徐州市| 翁牛特旗| 平阳县| 论坛| 特克斯县| 桦川县| 子长县| 洛阳市| 永福县| 安徽省| 尖扎县| 襄樊市| 西城区| 莱阳市| 固原市| 昭觉县| 呼图壁县| 玉山县|