`

Protobuf基础之proto文件的编译和使用

阅读更多

1、创建测试用的proto源文件,如:StudentInfo.proto,内容如下

 

message StudentInfo{
    required int32 id = 1;
    required string name = 2;
    optional string email = 3;
 
}

 

2、cmd命令行进入protobuf源代码文件夹下的src目录下,运行命令:

 

protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/*.proto  

 

本例中StudentInfo.proto放在了src目录中,且编译proto生成的py文件也放在src中,故命令为:protoc -I=./ --python_out=./ StudentInfo.proto

编译成功后,src目录下生成了一个StudentInfo_pb2.py文件:

 

 

3、在测试程序中如果要用到上述_pb2.py文件,需要先import到程序中,下面是一个简单的Demo:

 

import StudentInfo_pb2
import sys

pb_send_obj = StudentInfo_pb2.StudentInfo()
pb_send_obj.id = 10
pb_send_obj.name = "Lily"
pb_send_obj.email = "lily@gmail.com"
print pb_send_obj
sendDataStr = pb_send_obj.SerializeToString()
print "serialized string: ", sendDataStr
#----------------------------#
# message transmission       #
#----------------------------#
pb_receive_obj = StudentInfo_pb2.StudentInfo()
pb_receive_obj.ParseFromString(sendDataStr)
print "Parse: "
print pb_receive_obj.id
print pb_receive_obj.name
print pb_receive_obj.email

 

 

 运行结果如下:



 
4、序列化和反序列化

 

python protobuf 模块中常用的序列化和反序列化API如下:

 

• SerializeToString():将message序列化并返回str类型的结果(str类型只是二进制数据的一个容器而已,而不是文本内容)。如果message没有初始化,抛出message.EncodeError异常。 

• SerializePartialToString():将message序列化并返回str类型的结果,但是不检查message是否初始化。 

• ParseFromString(data):从给定的二进制str解析得到message对象。

 

  • 大小: 10.2 KB
  • 大小: 1.5 KB
分享到:
评论

相关推荐

    在使用netty进行网络通信协议传输使用protobuf时protobuf编译.proto文件生成JAVA类.zip

    在使用netty进行网络通信协议传输使用protobuf时protobuf编译.proto文件生成JAVA类.zip 包括测试proto3.proto文件,自动protobuf编译.proto文件生成JAVA类

    使用protobuf3.6.1 编译proto文件 c++

    使用protobuf3.6.1 编译proto文件 c++

    protobuf2.5直接批处理生成proto文件

    1. **.proto文件**:.proto文件是protobuf的数据结构定义文件,使用类似于XML的语法来定义消息类型。例如,你可以定义一个`Person`消息类型,包含`name`、`id`和`email`字段。这种定义使得数据在不同系统间传输时...

    protobuf 3.11版本,静态编译

    在代码中,你可以使用protobuf提供的API来定义消息类型(通过.proto文件),序列化和反序列化数据。例如: ```cpp #include <google/protobuf/io/coded_stream.h> #include <google/protobuf/io/zero_copy_stream_...

    protobuf编译器protocol,proto文件编译,grpc编译工具

    在压缩包中,`readme.txt`很可能是编译和使用protobuf及gRPC的指南,`bin`目录可能包含了protoc编译器和`protoc-gen-go`插件的可执行文件,而`include`目录则可能包含了protobuf库的头文件,这些头文件在编译...

    proto文件中导入其他proto文件demo

    3. **编译阶段的依赖解析**:当你使用protobuf编译器(protoc)生成代码时,它会自动处理这些导入关系,确保所有被引用的.proto文件都已包含在编译过程中。你需要确保所有的.proto文件都在编译命令的输入目录中,...

    protoc(Protobuf解码解密工具)用于无原始类时反编译数据,结构分析.rar

    标题中的"protoc"是Protobuf的核心工具,用于编译和反编译protobuf定义文件(.proto)。当你没有原始的类文件,但需要解析protobuf编码的数据时,protoc就派上了用场。它能够将.proto文件转换为对应编程语言(如Java...

    protubuf editor(最新proto文件编辑器,支持proto3)

    8. **帮助文档和教程**:随附的`ReadMe.htm`文件可能包含了编辑器的使用指南、快捷键说明以及protobuf和proto3的基础知识,帮助初学者快速上手。 **使用场景** protobuf广泛应用于分布式系统、网络通信、数据库...

    protobuf编译好的文件

    protobuf编译好的文件通常指的是Google开源的Protocol Buffers(简称protobuf)编译后的二进制库、头文件和源代码,这些文件已经过编译,可以直接在开发项目中使用,以实现数据序列化和反序列化的高效通信。protobuf...

    win10+WinGw编译的protobuf3.6.1静态库文件

    1,此文件夹中的protobuf库文件与exe均是在windows10+minGW下编译生成的 2,protobuf版本是3.6.1(源码一并附上) 3,使用说明参考: 3.1,编者环境window10 +qtCreator5.11.1(安装时勾选上minGW); 3.2, ...

    qt5.9.3 vs2015,Windows搭建Protobuf3.15编译环境

    在Windows平台上,使用Qt5.9.3和Visual Studio 2015(VS2015)搭建protobuf 3.15的编译环境是一个关键的步骤,这对于开发涉及protobuf序列化和反序列化的项目至关重要。protobuf是Google开发的一种高效的数据序列化...

    Google Protobuf 编译 成 java 文件

    **Google Protobuf简介** Google Protocol Buffers(简称Protobuf)是一种高效、跨平台的数据序列化协议,用于结构化数据的序列化。它提供了一种语言无关的、...这些文档将帮助你深入理解Protobuf的使用和最佳实践。

    protobuf 自动生成c# .cs文件

    2. **编译.proto文件**:使用Google提供的`protoc`编译器,你可以将.proto文件转换为C#代码。在命令行中,你可以运行类似以下的命令: ```bash protoc --csharp_out=. person.proto ``` 这将在当前目录下生成一个`...

    protobuf2.5.0jar包和编译工具

    3. **编译时检查**:在编译阶段,protobuf会检查.proto文件的语法和类型一致性,确保数据结构的正确性。 4. **序列化与反序列化**:Java程序可以通过protobuf API将对象序列化为字节流,也可以将字节流反序列化回...

    NAnt编译proto成C#和dll过程总结

    在C#中,protobuf可以将.proto文件编译成C#类,这些类可以用来序列化和反序列化数据。 本总结主要涉及以下三个步骤: 1. **protobuf编译proto为C#** 首先,你需要安装protobuf的C#版本。这通常包括protoc编译器,...

    ProtoBuf的自动编译生成工具,自动生成java和C#文件,全自动化

    为项目开发了一个proto的自动生成工具,需要把protoc.exe放入protobuf-net/ProtoGen文件夹下面,在protoGen文件夹下面建立out文件夹,out文件夹下面分两个文件,一个java一个csharp,把*.proto文件直接放在ProtoGen...

    proto与cmakelists结合进行编译编程

    在"proto与cmakelists结合进行编译编程"这个主题中,我们将探讨如何使用CMakeLists.txt文件来配置protobuf的编译过程,并将生成的代码集成到C++项目中。 首先,你需要安装protobuf库,这通常包括protoc编译器和对应...

    fdbus编译代码(涉及protobuf编译)-总结

    - 使用`protoc`工具编译proto文件生成对应的cc文件: ``` $ protoc ./common.base.Example.proto --cpp_out=./idl-gen ``` - 在客户端和服务端代码中包含`.pb.h`对应的头文件。 #### 五、编译fdbus示例 - 创建...

    protobuf导入定义(import)

    当你的protobuf文件有导入关系时,编译这些文件时需要确保所有依赖的.proto文件都可用。通常,protobuf编译器(如protoc)会自动处理这些依赖关系。如果你使用构建工具(如Bazel、Gradle、Maven等),它们会配置相应...

    CentOS7环境下编译的protobuf 3.1版本的静态库和动态库,里面包含protoc程序和include目录

    CentOS7环境下编译的protobuf 3.1版本的静态库和动态库,里面包含protoc程序和include目录,经过测试程序 protoc --version 之后终端显示的是当前protobuf的版本号,说明编译的库能够正常使用

Global site tag (gtag.js) - Google Analytics