【Protocol Buffer】Protocol Buffer入门教程(五):repeated限定修饰符

article/2025/9/14 0:13:20

00. 目录

文章目录

    • 00. 目录
    • 01. 限定修饰符介绍
    • 02. 字段API分析
    • 03. 测试代码
    • 04. 编译和测试
    • 05. 参考

01. 限定修饰符介绍

repeated 代表可重复,我们可以理解为数组

syntax = "proto3";//指定版本信息,不指定会报错message Person //message为关键字,作用为定义一种消息类型
{string name = 1;    //姓名int32 id = 2;       //idstring email = 3;   //邮件
}message AddressBook
{repeated Person people = 1;
}

02. 字段API分析

deng@itcast:/mnt/hgfs/LinuxHome/day03$ protoc addressbook.proto --cpp_out=./
deng@itcast:/mnt/hgfs/LinuxHome/day03$ 

而对于字段修饰符为repeated的字段生成的函数,则稍微有一些不同,如people字段,则编译器会为其产生如下的代码:

  enum : int {kPeopleFieldNumber = 1,};  // repeated .Person people = 1;int people_size() const;private:int _internal_people_size() const;public:void clear_people();::Person* mutable_people(int index);::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::Person >*mutable_people();private:const ::Person& _internal_people(int index) const;::Person* _internal_add_people();public:const ::Person& people(int index) const;::Person* add_people();const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::Person >&people() const;

03. 测试代码

参考代码如下:

#include "addressbook.pb.h"
#include <iostream>
#include <fstream>using namespace std;void set_addressbook()
{AddressBook obj;Person *p1 = obj.add_people(); //新增加一个Personp1->set_name("tom");p1->set_id(1);p1->set_email("tom@qq.com");Person *p2 = obj.add_people(); //新增加一个Personp2->set_name("jim");p2->set_id(2);p2->set_email("jim@qq.com");Person *p3 = obj.add_people(); //新增加一个Personp3->set_name("abc");p3->set_id(3);p3->set_email("abc@qq.com");fstream output("pb.itcast", ios::out | ios::trunc | ios::binary);bool flag = obj.SerializeToOstream(&output);//序列化if (!flag){cerr << "Failed to write file." << endl;return;}output.close();//关闭文件
}void get_addressbook()
{AddressBook obj;fstream input("./pb.itcast", ios::in | ios::binary);obj.ParseFromIstream(&input);  //反序列化input.close(); //关闭文件for (int i = 0; i < obj.people_size(); i++){const Person& person = obj.people(i);//取第i个peoplecout << "第" << i + 1 << "个信息\n";cout << "name = " << person.name() << endl;cout << "id = " << person.id() << endl;cout << "email = " << person.email() << endl << endl;}
}int main()
{// Verify that the version of the library that we linked against is// compatible with the version of the headers we compiled against.GOOGLE_PROTOBUF_VERIFY_VERSION;set_addressbook(); //序列化get_addressbook(); //反序列化// Optional:  Delete all global objects allocated by libprotobuf.google::protobuf::ShutdownProtobufLibrary();return 0;
}

04. 编译和测试

编译和测试

deng@itcast:/mnt/hgfs/LinuxHome/day03$ g++  test.cpp addressbook.pb.cc `pkg-config --libs --cflags protobuf`
deng@itcast:/mnt/hgfs/LinuxHome/day03$ ./a.out 
第1个信息
name = tom
id = 1
email = tom@qq.com第2个信息
name = jim
id = 2
email = jim@qq.com第3个信息
name = abc
id = 3
email = abc@qq.comdeng@itcast:/mnt/hgfs/LinuxHome/day03$ 

在这里插入图片描述

05. 参考

官方参考文档:https://developers.google.cn/protocol-buffers/docs/reference/cpp-generated#repeatednumeric

测试代码下载:测试代码下载


http://chatgpt.dhexx.cn/article/kRh1Jc28.shtml

相关文章

protobuf入门教程(四):repeated限定修饰符

限定修饰符说明 repeated 代表可重复&#xff0c;我们可以理解为数组&#xff1a; syntax "proto3";//指定版本信息&#xff0c;不指定会报错message Person //message为关键字&#xff0c;作用为定义一种消息类型 {string name 1; //姓名int32 id 2; …

一个真·菜鸟理解的springmvc工作原理

1 springmvc的映射器和适配器 1.1springmvc的映射器 根据客户端请求的url&#xff0c;找到处理本次请求的handler&#xff08;处理器&#xff09;&#xff0c;将url和controller关联起来 1.2springmvc的适配器 对映射器查找到的controller中的方法进行调用。 第一种&#xff1…

【转】SpringMVC的工作原理图

SpringMVC的工作原理图&#xff1a; ##SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&#xff0c;生成处理器对象及处理…

SpringMVC工作原理及执行流程

一、SpringMVC简介 SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;使用了MVC架构模式的思想&#xff0c;将web层进行职责解耦&#xff0c;并管理应用所需对象的生命周期&#xff0c;为简化日常开发&#xff0c;提供了很大便利。  …

SpringMVC工作原理图

1.用户发送请求至前端控制器DispatcherServlet(也叫中央处理器). 2.DispatcherServlet收到请求调用HandlerMappering处理器映射器 3.处理器映射器找到具体的处理器&#xff08;可以根据xml配置、注解进行查找&#xff09;&#xff0c;生成处理器对象及处理器拦截器&#xff08;…

servlet — SpringMVC工作原理

如下图&#xff0c;所有实线的部分都由 SpringMVC 框架实现&#xff0c;我们的代码只需要处理虚线的部分&#xff1a; 【总结】&#xff1a; DispatchServlet(请求分发器 / 前端控制器), 是SpringMVC的核心 1. 用户发起请求的时候调用前端控制器 DispatcherServlet&#xff1b…

SpringMVC 工作原理

0x00:请求流程图 首先,来看一下 SpringMVC 的整个请求流程,如下图: 0x01:步骤解析 SpringMVC 整体流程步骤解析: 1,用户去单击了某个请求路径,发起了一个 request 请求,这个请求会被 DispatcherServlet 前端控制器处理。 2,前端控制器 DispatcherServlet 去请求处…

SpringMVC工作原理nbsp;及注解说明

Spring MVC工作原理 及注解说明 SpringMVC框架介绍 1) spring MVC属于SpringFrameWork的后续产品&#xff0c;已经融合在SpringWeb Flow里面。 Spring框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的MVC 架构&#xff0c;可以选择是使用内置的Spring Web …

SpringMVC工作原理的介绍

1.原理图&#xff1a; 2.流程文字介绍&#xff1a; 1.用户向服务器发送请求&#xff0c;请求被Spring前端控制Servlet DispatcherServlet捕获&#xff1b; 2.DispatcherServlet对请求UR进行解析&#xff0c;得到请求资源标识符&#xff08;URI&#xff09;。然后根据该URI&…

SpringMVC工作原理(1)

大家好&#xff0c;今天和大家分享SpringMVC的相关知识&#xff0c;主要是对SpringMVC的工作原理做一些分析。 SpringMVC的工作流程如下&#xff1a; 接下来我们先来对其中的组件以及相应的功能来做简单介绍&#xff1a; 组件&#xff1a; 1.DispatcherServlet DispatcherSer…

SpringMVC工作原理详解

SpringMVC工作原理详解 在学习之前&#xff0c;先来两张神图镇楼 什么是MVC 经典MVC模式中&#xff0c;M是指业务模型&#xff0c;V是指用户界面&#xff0c;C则是控制器&#xff0c;使用MVC的目的是将M和V的实现代码分离&#xff0c;从而使同一个程序可以使用不同的表现形式…

springMVC工作原理(含图)

SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&#xff0c;生成处理器对象及处理器拦截器(如果有则生成)一并返回给Dis…

理清SpringMVC工作原理

一、首先&#xff0c;我们先来认识一下SpringMVC的主要组件 前端控制器&#xff08;DisatcherServlet&#xff09;:接收请求&#xff0c;响应结果&#xff0c;返回可以是json,String等数据类型&#xff0c;也可以是页面&#xff08;Model&#xff09;。 处理器映射器&#xff0…

SpringMVC工作原理及源码解析

SpringMVC工作原理及源码解析 一&#xff1a;SpringMVC原理图二&#xff1a;SpringMVC的主要组件1、前端控制器DispatcherServlet&#xff1a;2、处理器映射器HandlerMapping&#xff1a;3、处理器适配器HandlerAdapter&#xff1a;4、处理器Handler&#xff1a;5、控制器Contr…

SpringMVC工作原理和工作流程

在博客看见一编写的非常清晰的博客&#xff0c;对现在的注重开发层面不注重底层原理的还是有用处的。 原文出处&#xff1a;https://www.cnblogs.com/xiaoxi/p/6164383.html SpringMVC工作原理 SpringMVC的工作原理图&#xff1a; SpringMVC流程 1、 用户发送请求至前端控制…

SpringMVC的简介概述、工作原理

SpringMVC简述概括 SpringMVC的工作原理

SpringMVC工作原理之参数解析

前面分析到 SpringMVC工作原理之处理映射[HandlerMapping] &#xff0c;由映射处理器(HandlerMapping) 解析出对应的 handler。接着 SpringMVC工作原理之适配器[HandlerAdapter] 描述了 handler 是怎么匹配到合适的适配器&#xff0c;进行 handler 对应方法的执行。其他几种适配…

16.springmvc工作原理分析

springmvc 如何做URL映射关系 1.SpringIOC容器加载时开始遍历所有的bean对象 判断 bean对象 类上是否有加上 Controller注解,如果类上有加该注解的话 则该类就是为我们控制类&#xff1b; 2.在容器初始化时会建立所有url和controller的对应关系&#xff0c;利用java反射机制…

SpringMVC工作原理及其流程

本文介绍SpringMVC的基本原理,对于一个浏览器请求,SpringMVC的处理流程。 SpringMVC主要包含一下组件 DispatcherServlet-前端控制器HandlerMapping-处理器映射Controller-控制器ViewResolver-视图解析器View-视图Spring的请求流程 SpringMVC的核心在于其请求流程,这是使用…

阿里云YUM源配置

文章目录 阿里云YUM源配置1.备份原有yum源2.根据自己系统下载yum源3.重新加载yum0x00. 阿里云YUM源配置 今天&#xff0c;打开我的Centos7系统&#xff0c;美滋滋要搭建一波LAMP环境。一把梭哈。 yum -y install httpd mariadb mariadb-server php php-mysql 奈何&#xff0c;…