`
cwqcwk1
  • 浏览: 89281 次
文章分类
社区版块
存档分类
最新评论

protobuf repeated类型的使用

 
阅读更多

protobuf是Google开发的一个序列化框架,类似XML,JSON,基于二进制,比传统的XML表示同样一段内容要短小得多。通过protobuf,可以很轻松的调用相关方法来完成业务数据的序列化与反序列化。protobuf repeated类型相当于std的vector,可以用来存放N个相同类型的内容,文章将简单介绍protobuf repeated的使用。

首先定义一个protobuf结构,如下:

message Person {
  required int32 age = 1;
  required string name = 2;
}

message Family {
  repeated Person person = 1;
}
下面我们以例子简单说明如何使用:

int main(int argc, char* argv[])
{

	GOOGLE_PROTOBUF_VERIFY_VERSION;

	Family family;
	Person* person;

	// 添加一个家庭成员,John
	person = family.add_person();
	person->set_age(25);
	person->set_name("John");

	// 添加一个家庭成员,Lucy
	person = family.add_person();
	person->set_age(23);
	person->set_name("Lucy");

	// 添加一个家庭成员,Tony
	person = family.add_person();
	person->set_age(2);
	person->set_name("Tony");

	// 显示所有家庭成员
	int size = family.person_size();

	cout << "这个家庭有 " << size << " 个成员,如下:" << endl;

	for(int i=0; i<size; i++)
	{
		Person psn = family.person(i);
		cout << i+1 << ". " << psn.name() << ", 年龄 " << psn.age() << endl;
	}

	getchar();
	return 0;
}

参考:

http://blog.csdn.net/mycwq/article/details/19622571


分享到:
评论

相关推荐

    repeated限定修饰符的使用

    `repeated`关键字就是在定义这些字段时使用的,它告诉protobuf编译器这个字段可以包含零个或多个值。 例如,假设我们有一个消息类型`Person`,其中包含一个`repeated`字段`email`: ```protobuf message Person { ...

    详解protobuf-c之在C语言中如何使用repeated生成数组和字符串(包含配置pb-callback-t)

    本篇文章将详细解释如何在C语言环境中使用protobuf-c处理`repeated`字段,创建数组和字符串,并特别关注`pb_callback_t`这一特殊类型。 首先,我们需要理解`repeated`字段在protobuf语义中的含义。在protobuf的定义...

    C++使用protobuf 作为网络消息协议

    标题中的"C++使用protobuf作为网络消息协议"指出,我们将探讨如何在C++编程环境中利用Protocol Buffers(protobuf)这一高效的数据序列化工具来构建网络通信的消息协议。protobuf是由Google开发的一种语言中立、平台...

    Protobuf使用手册.doc

    optional 表示该属性为可选属性,不指定,使用默认值(int 或者 char 数据类型默认为 0,string 默认为空,bool 默认为 false,嵌套 message 默认为构造,枚举则为第一个)repeated 表示该属性为重复字段,可看作是...

    protobuf c++使用手册

    此外,对于字符串和其他消息类型,Protobuf 使用长度前缀编码,以确保高效地存储和传输数据。 #### 2.7 一条消息的结构 每条消息由字段编号和对应的值组成。字段编号用于标识消息中的每个字段,而值则取决于字段...

    google protobuf-中英文使用手册

    4. **选项(Option)**:可以自定义消息类型的属性,如是否允许字段值为空(`optional`、`required`或`repeated`)。 **protobuf的使用流程** 1. **编写.proto文件**:定义数据结构和消息类型。 2. **运行编译器**...

    protobuf文件定义及转化为java对象

    定义protobuf文件(包含enum,message,required,optional,repeated, 结构体定义中引用另一个结构体), 生成java文件,能够构建java对象,并转化为字节byte或者流,能够将流或字节转化为对象

    Google ProtoBuf 使用说明

    ### Google ProtoBuf 使用说明 #### 一、简介与特点 Google Protocol Buffers(简称 ProtoBuf 或 Protobuf)是一种跨语言、跨平台的数据序列化格式,它由谷歌开发并开源。与传统的XML相比,Protobuf提供了更为高效...

    lua proto 解决int64 解析

    本文将详细介绍如何在Lua中使用protobuf解决int64类型的解析问题。 首先,让我们理解一下问题的背景。Lua语言的整数类型是基于双精度浮点数(double)实现的,最大能精确表示的整数大约是2^53。因此,当尝试存储或...

    protobuf3转java工具

    1. 定义.proto文件:在文本文件中使用protobuf语法定义消息类型。 2. 编译.proto文件:使用protobuf编译器(protoc)将.proto文件转换为目标语言(如Java)的源代码。 3. 使用生成的类:在Java项目中,可以直接使用...

    GDB调试打印STL PROTOBUF

    GDB调试打印STL PROTOBUF,只要放到.gdbinit文件中就可以直接打印MAP LIST VECTOR SET DEQUEUE等等STL容器里装的东西了。还有PROTOBUF里装的东西也可以打印出来,调试时看PB协议很方便。

    unity C#使用protobuf

    1. **使用FieldOptions**:通过在.proto文件中添加`[optional]`、`[repeated]`等属性来优化数据结构的设计。 2. **延迟加载**:对于大型数据集,可以考虑实现一种机制,只在真正需要时才加载特定部分的数据。 3. **...

    protobuf编译,安装和简单使用文档

    ### protobuf的编译、安装与简单使用指南 #### 一、概述 本文档旨在提供一个关于protobuf的基础使用教程,包括其安装过程以及简单的C++示例。Protocol Buffers(简称protobuf)是由Google开发的一种数据交换格式,...

    protobuf3 语法详解 pdf

    8. **编译过程**:使用protobuf编译器将`.proto`文件转换为目标编程语言的源码,生成的类提供了访问字段、序列化和反序列化的接口。 通过理解以上知识点,开发者可以有效地利用protobuf3来设计高效的数据交换格式,...

    Protobuf生成java类

    - Protobuf通过.proto文件定义数据结构,其中包含了各种消息类型、字段和它们的数据类型。 - 每个.proto文件可以包含多个消息类型,每个消息类型由一系列字段组成,每个字段都有一个唯一的标识符和类型。 2. **....

    protobuf-2.6.0.zip

    3. **编码和解码数据**:在生成的代码中,可以创建对象,填充数据,然后使用protobuf库将其编码为字节流,反之亦然。 ### 3. protobuf 2.6.0 特性 - 支持基本数据类型,如整数、浮点数、字符串等,以及复杂的数据...

    protobuf 2.3 google code

    4. **易于使用**:protobuf提供的API简洁明了,易于学习和使用。 在protobuf 2.3这个版本中,可能包含了以下特性: - 支持基本数据类型、数组、映射、枚举和嵌套消息。 - 引入了`required`、`optional`和`repeated`...

    最新版本protobuf3.0

    protobuf 3.0引入了更简洁的语法规则,去除了旧版本中的optional关键字,并将repeated字段默认为packed,这使得.proto文件更易于阅读和编写。此外,还支持枚举类型(enum)的默认值设定,使得代码更具可读性。 ### ...

    protobuf-3.15.8.zip

    6. **扩展性与优化**:protobuf允许在不破坏兼容性的情况下添加新的字段,同时提供了如`optional`、`required`和`repeated`等字段修饰符来控制序列化行为。此外,protobuf还支持自定义选项以实现特定的编码优化。 7...

Global site tag (gtag.js) - Google Analytics