`
Poechant
  • 浏览: 229428 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24307
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22094
社区版块
存档分类
最新评论

Google Protobuf Primer (2) Language Guide

 
阅读更多

Google Protobuf Primer (2) Language Guide

去年年初初次接触 Google Protobuf,如今已经有不少变化,从这篇开始,续一下 :)

1. Specifying Field Rules

You specify that message fields are one of the following:

  • required: a well-formed message must have exactly one of this field.
  • optional: a well-formed message can have zero or one of this field (but not more than one).
  • repeated: this field can be repeated any number of times (including zero) in a well-formed message. The order of the repeated values will be preserved.

For historical reasons, repeated fields of basic numeric types aren't encoded as efficiently as they could be. New code should use the special option [packed=true] to get a more efficient encoding. For example:

repeated int32 samples = 4 [packed=true];

But when you use it as the following:

message Locations {
    repeated Location location = 1 [packed=true];
}

compile it, then you will got a warning:

[packed = true] can only be specified for repeated primitive fields.

So pay attention to the type of fields you intend to specify.

2. Scalar Value Types

proto Type Notes C++ Type Java Type
double double double
float float float
int32 variable-len, inefficient for negative num int32 int
int64 variable-len, inefficient for negative num int64 long
uint32 variable-len uint32 int
uint64 variable-len uint64 long
sint32 variable-len, signed num int32 int
sint64 variable-len, signed num int64 long
fixed32 always 4-byte, efficient > 228 int32 int
fixed64 always 8-byte, efficient > 256 int64 long
sfixed32 always 4-byte int32 int
sfixed64 always 8-btye int64 long
bool bool boolean
string UTF-8 string, 7-bit ASCII string string String
bytes any arbitrary sequence of bytes string ByteString

概括下:

  • 可正可负,范围小(228或256以内):sint32sint64
  • 可正可负,范围大(228或256以上):sfixed32sfixed64
  • 只会正的,范围小(228或256以内):uint32uint64
  • 只会正的,范围大(228或256以上):fixed32fixed64
  • 布尔:bool
  • 浮点:floatdouble
  • utf8 string 或 7-bit ascii string:string
  • ByteString:bytes

-

转载请注明来自柳大的CSDN博客:Blog.CSDN.net/Poechant,微博:weibo.com/lauginhom

-

分享到:
评论

相关推荐

    Protobuf Language Guide

    本指南为Google的Protocol Buffers语言指南,它描述了如何使用Protocol Buffers协议来构建你的数据结构,涵盖了.proto文件语法以及如何从.proto文件生成数据访问类。此指南主要介绍的是proto2版本的Protocol Buffers...

    google protobuf 最新源代码

    google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf ...

    Windows环境使用google protobuf实现简单的例子

    标题中的“Windows环境使用google protobuf实现简单的例子”指的是在Windows操作系统下,利用Visual Studio (VS) 2010开发环境,结合Google的Protocol Buffers(protobuf)版本2.5.0进行简单应用的教程。protobuf是...

    google protobuf的应用

    服务器端与客户端通信,使用google protobuf作为交互数据的序列化工具,其中客户端使用select机制实现I/O复用,服务端使用epoll机制,提高并发连接时的处理效率。软件环境:linux。文件dealpack.cc是服务端和客户端...

    google protobuf-2.4.1

    protobuf,全称Protocol Buffers,是Google开发的一种数据序列化协议。它提供了一种语言无关、平台无关、高效且自动化的数据序列化方法,类似于XML和JSON,但更小、更快、更简单。在"google protobuf-2.4.1"这个版本...

    google protobuf 源代码

    Google Protobuf(Protocol Buffers)是Google开发的一种数据序列化协议,它允许开发者定义数据结构的格式,并将这些数据高效地编码和解码为二进制格式,适用于跨平台、跨语言的数据交换。Protobuf的设计目标是提高...

    protobuf 3.20.2

    Protobuf(Protocol Buffers)是Google推出的一种数据序列化协议,它提供了一种语言中立、平台中立、可扩展的方式来组织数据,类似于XML和JSON,但更高效、更小且更快。在3.20.2版本中,我们关注的是其性能优化、新...

    java开发Google protobuf 3.2.0 jar包 protobuf-java-3.2.0.jar

    ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,...protobuf-java-3.2.0.jar包 太难找了,只能是自己发布一个jar包 特此分享出来

    google protobuf-3.2.0 windowsprotoc3.2.0.exe

    protobuf全称是Protocol Buffers,是由Google开发的一种数据序列化协议,它允许开发者定义数据结构,然后将数据编码为二进制格式,用于存储或网络传输。标题中的"google protobuf-3.2.0"指的是protobuf的3.2.0版本,...

    ros2转protobuf,再转dds发出.

    4. **ROS2的dds_idl工具**:ROS2提供了一个工具`dds_idl`,它可以将protobuf消息转换为DDS IDL(Interface Definition Language),这样就可以在DDS环境中使用这些消息。 5. **ROS2的idlpp工具**:idlpp是ROS2中的...

    google protobuf-2.5.0

    protobuf-2.5.0是Google Protocol Buffers(简称protobuf)的一个版本,它是一个高效、灵活的数据序列化库,常用于构建跨平台的通信协议和数据存储格式。Protocol Buffers是一种语言中立、平台中立的机制,可以将...

    google protobuf C教程

    2. **消息定义**: 使用.proto文件定义数据结构,这是使用Protobuf的第一步。教程会解释如何编写.proto文件,包括定义消息类型、字段类型和编号。 3. **代码生成**: 使用`protoc`编译器将.proto文件转换为C语言的源...

    google protobuf 2.6.0

    Google Protobuf 2.6.0 是一个强大的、开源的序列化框架,它允许开发者将结构化数据序列化,类似于XML、JSON,但更小、更快、更简单。这个版本的Protobuf是2.x系列的一个稳定版本,发布于2015年,广泛应用于跨平台的...

    google protobuf socket python example

    使用google protobuf通过TCP传输文件

    protobuf2+java

    标题 "protobuf2+java" 指涉的是Google开源的Protocol Buffers(简称protobuf)的第二版与Java语言的结合使用。Protocol Buffers是一种高效的数据序列化协议,它允许开发者定义数据结构,然后生成能够在各种数据平台...

    Unity调用谷歌Protobuf简单案例,含原始制作文件

    标题中的“Unity调用谷歌Protobuf简单案例”指的是在Unity游戏引擎中使用Google的Protocol Buffers(Protobuf)进行数据序列化和反序列化的实践教程。Protobuf是一种高效、跨平台的数据序列化协议,常用于网络通信和...

    protobuf-dt com.google.eclipse.protobuf_2.3.2.201609161849.jar

    to-date version of the descriptor.proto file into the plugin jar under .p2\pool\plugins\com.google.eclipse.protobuf_2.3.2.201609161849.jar and restarted Eclipse which resolved this. -- @gfecher ...

    google protobuf

    google protobufgoogle protobufgoogle protobufgoogle protobufgoogle protobufgoogle protobufgoogle protobufgoogle protobuf

Global site tag (gtag.js) - Google Analytics