首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我应该使用二进制文件还是文本文件来存储protobuf消息?

在选择使用二进制文件还是文本文件来存储protobuf消息时,需要考虑以下几个因素:

  1. 文件大小:二进制文件通常比文本文件更小,因为它们不需要包含任何空格、换行符或其他格式字符。因此,如果文件大小是一个关键因素,二进制文件可能是更好的选择。
  2. 可读性:如果需要人们阅读和编辑消息,那么文本文件可能更合适,因为它们具有更好的可读性和可编辑性。
  3. 性能:二进制文件通常比文本文件更快,因为它们不需要进行解析和转换。因此,如果性能是一个关键因素,二进制文件可能是更好的选择。
  4. 兼容性:如果需要与其他系统或应用程序交换消息,那么使用通用的文本格式(如JSON或XML)可能更合适,因为这些格式更容易被其他工具和库解析和处理。

综上所述,选择使用二进制文件还是文本文件来存储protobuf消息取决于您的具体需求和场景。如果文件大小和性能是关键因素,二进制文件可能是更好的选择。如果可读性和兼容性是关键因素,文本文件可能更合适。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Springboot集成Protobuf

它使开发人员能够在文件中定义结构化数据.proto,然后使用文件生成可以从不同数据流写入和读取数据的源代码。 2.1、核心思想 Protobuf 核心思想是使用协议定义数据的结构和编码方式。...协议是一个文本文件,其中定义了消息的结构。消息由字段组成,每个字段都有一个名称、类型和可选的默认值。...Protobuf 文件使用文件扩展名保存.proto。该.proto文件Protobuf 的 IDL 格式编写,包含有关数据结构的所有信息。数据被建模为“消息”,即名称/值对组。...该源代码包括用于写入、读取和操作.proto文件中定义的消息类型的类和方法。 当有数据要存储或传输时,可以创建生成的类的实例并用您的数据填充它们。然后将这些实例序列化为二进制格式。...自解释性差:Protobuf二进制形式存储数据,不便于阅读和编辑。XML 具有自解释性,可以直接用文本编辑器打开和编辑。 Protobuf 是一种优秀的序列化格式,但并非完美无缺。

96610

IM通讯协议专题学习(一):Protobuf从入门到精通,一篇就够!

写到这里:或许您和我一样,在第一次看完这些介绍后还是不明白 Protobuf 究竟是什么,那么想一个简单的例子应该比较有助于理解它(请继续往下阅读)。...opt 是一个可选的成员,即消息中可以不包含该成员。4.4 编译 .proto 文件写好 proto 文件之后就可以用 Protobuf 编译器将该文件编译成目标语言了。本例中我们将使用 C++。...在生成的头文件中,定义了一个 C++ 类 helloworld,后面的 Writer 和 Reader 将使用这个类消息进行操作。诸如对消息的成员进行赋值,将消息序列化等等都有相应的方法。...最后我们发现一个简单的 Helloworld 也需要写许多处理消息格式的代码。如果使用 Protobuf,那么这些细节就可以不需要应用程序考虑了。...考察消息结构之前,让首先要介绍一个叫做 Varint 的术语。Varint 是一种紧凑的表示数字的方法。它用一个或多个字节表示一个数字,值越小的数字使用越少的字节数。这能减少用来表示数字的字节数。

1.2K10
  • Google Protocol Buffer 的使用和原理

    或许您和我一样,在第一次看完这些介绍后还是不明白 Protobuf 究竟是什么,那么想一个简单的例子应该比较有助于理解它。...最后我们发现一个简单的 Helloworld 也需要写许多处理消息格式的代码。 如果使用 Protobuf,那么这些细节就可以不需要应用程序考虑了。...这需要动态编译 .proto 文件,并使用其中的 Message。 Protobuf 提供了 google::protobuf::compiler 包完成动态编译的功能。...Protobuf 的更多细节 人们一直在强调,同 XML 相比, Protobuf 的主要优点在于性能高。它以高效的二进制方式存储,比 XML 小 3 到 10 倍,快 20 到 100 倍。...考察消息结构之前,让首先要介绍一个叫做 Varint 的术语。 Varint 是一种紧凑的表示数字的方法。它用一个或多个字节表示一个数字,值越小的数字使用越少的字节数。

    1.9K30

    在NodeJS中玩转Protocol Buffer

    Protocol Buffer(下文简称protobuf)是Google提供的一种数据序列化协议,下面是从网上找到的Google官方对protobuf的定义: Protocol Buffers 是一种轻便高效的结构化数据存储格式...道理我们都懂,然后并没有什么卵用,看完上面这段定义,对于protobuf是什么还是一脸懵逼~ ?...在大公司,最重要的就是优化效率、节省成本,因此二进制协议明显优于http这样的文本协议。 下面举两个简单的例子,应该有助于我们理解protobuf。...opt 是一个可选的成员,即消息中可以不包含该成员。1、2、3这几个数字是这三个字段的唯一标识符,这些标识符是用来在消息二进制格式中识别各个字段的,一旦开始使用就不能够再改变。...编译 .proto 文件 我们可以使用protobuf.js提供的命令行工具编译 .proto 文件 用法: # pbjs [options] [> outFile] 我们来看看

    3.1K10

    嵌入式linux之go语言开发(七)protobuf使用

    下载的是protoc-3.4.0-win32.zip protobuf的简单使用: 先编写*.proto定义文件如test.proto: 在这个文件中可以定义需要的结构, 例如枚举型, 结构体等等....【标识符】 在消息定义中,每个字段都有唯一的一个数字标识符。 标识符用来在消息二进制格式中识别各个字段,一旦使用就不能够再改变。...所以应该为频繁出现的消息元素保留[1,15]内的标识号。...编码方式采用Varint编码(如果为负数,采用Zigzag辅助编码),数据存储方式使用T-V方式存储二进制字节流。...Protobuf编码的最终结果可以使用下图表示: ? ? 后续打算对protobuf的协议格式做个研究,对go的protobuf的源码做个解读。

    1.1K20

    在NodeJS中玩转Protocol Buffer

    Protocol Buffer(下文简称protobuf)是Google提供的一种数据序列化协议,下面是从网上找到的Google官方对protobuf的定义: Protocol Buffers 是一种轻便高效的结构化数据存储格式...道理我们都懂,然后并没有什么卵用,看完上面这段定义,对于protobuf是什么还是一脸懵逼~ ?...在大公司,最重要的就是优化效率、节省成本,因此二进制协议明显优于http这样的文本协议。 下面举两个简单的例子,应该有助于我们理解protobuf。...opt 是一个可选的成员,即消息中可以不包含该成员。1、2、3这几个数字是这三个字段的唯一标识符,这些标识符是用来在消息二进制格式中识别各个字段的,一旦开始使用就不能够再改变。...编译 .proto 文件 我们可以使用protobuf.js提供的命令行工具编译 .proto 文件 用法: # pbjs [options] [> outFile] 我们来看看

    3.6K90

    在 NodeJS 中玩转 Protocol Buffer

    Protocol Buffer(下文简称protobuf)是Google提供的一种数据序列化协议,下面是从网上找到的Google官方对protobuf的定义: Protocol Buffers 是一种轻便高效的结构化数据存储格式...道理我们都懂,然后并没有什么卵用,看完上面这段定义,对于protobuf是什么还是一脸懵逼~ NodeJS开发者为何要跟Protocol Buffer打交道 作为JavaScript开发者,对我们最友好的数据序列化协议当然是大名鼎鼎的...在大公司,最重要的就是优化效率、节省成本,因此二进制协议明显优于http这样的文本协议。 下面举两个简单的例子,应该有助于我们理解protobuf。...opt 是一个可选的成员,即消息中可以不包含该成员。1、2、3这几个数字是这三个字段的唯一标识符,这些标识符是用来在消息二进制格式中识别各个字段的,一旦开始使用就不能够再改变。...编译 .proto 文件 我们可以使用protobuf.js提供的命令行工具编译 .proto 文件 用法: # pbjs [options] [> outFile] 我们来看看

    5.2K11

    Protocol Buffers(1):序列化、编译与使用

    Protobuf有了大致的了解后,我们来看看如何编译和使用Protobuf。...通过上面3个文件夹,我们就可以完成序列化和反序列化工作。 Protocol Buffers C++ 使用 下面通过一个例子说明怎么使用Protobuf。...-java_out、--python_out等指定其他语言代码生成的目录。...Protocol Buffers的可读性 二进制文件虽然体积更小,但其可读性无疑是差的,XML和JSON的优势之一就是可读性,可读意味着可编辑、可人工校验,Protobuf是不是就不能做到了呢?...有了文本文件我们就可以直接阅读、校验和修改序列化后的数据,并且自如地在二进制文件文本文件间转换,比如修改文本文件、恢复成对象、再导出二进制文件

    2.1K30

    还在用json通信?自动生成代码不香吗

    Protobuf对于不同的字段类型采用不同的编码方式和数据存储方式对消息字段进行序列化,以确保得到高效紧凑的数据压缩。 protobuf如何序列化 1 判断每个字段是否有设置值,有值才进行编码。...3 将编码后的数据块按照字段类型采用不同的数据存储方式封装成二进制数据流 如何反序列化 1 调用消息类的parseFrom(input)解析从输入流读入的二进制字节数据流。...它用一个或多个字节表示一个数字,值越小的数字使用越少的字节数。这能减少用来表示数字的字节数。...如何使用proto到项目中 protobuf的数据还支持从proto文件生成不同编程语言文件的机制。...在多平台消息传递中,对其他项目的兼容性并不是很好,需要做相应的适配改造工作。相比json 和 XML,通用性还是没那么好。

    66850

    IM通讯协议专题学习(七):手把手教你如何在NodeJS中从零使用Protobuf

    Protocol Buffer(下文简称Protobuf)是Google提供的一种数据序列化协议,下面是从网上找到的Google官方对Protobuf的定义:Protocol Buffers 是一种轻便高效的结构化数据存储格式...道理我们都懂,然后并没有什么卵用,看完上面这段定义,对于Protobuf是什么还是一脸懵逼。...在大公司,最重要的就是优化效率、节省成本,因此二进制协议明显优于http这样的文本协议。下面举两个简单的例子,应该有助于我们理解protobuf。...6、使用 Protobuf 和NodeJS开发一个简单的例子6.1 概述打算使用 Protobuf 和NodeJS开发一个十分简单的例子程序。...6.3 编译 .proto 文件我们可以使用protobuf.js提供的命令行工具编译 .proto 文件

    1.2K30

    Protobuf: 高效数据传输的秘密武器

    由于 Protobuf 是基于二进制编码的,因此可以在数据传输和存储中实现更高效的数据交换,同时也可以跨语言使用。...编写 Protobuf 使用 Protobuf 的语言定义文件(.proto)可以定义要传输的信息的数据结构,可以包括各个字段的名称、类型等信息。同时也可以相互嵌套组合,构造出更加复杂的消息结构。...反序列化:将二进制数据反序列化成内存中的数据对象,可以用于数据处理和业务逻辑。 下面演示使用 Protobuf 进行字符数组和文件的序列化及反序列化过程。...首先,Protobuf 使用二进制编码,会提高性能;其次 Protobuf 在将数据转换成二进制时,会对字段和类型重新编码,减少空间占用。它采用 TLV 格式存储编码后的数据。...这种编码方式可以在数据值比较小的情况下,只使用一个字节存储数据,以此提高编码效率。 最后,Protobuf 还可以通过采用压缩算法减少数据传输的大小。

    57050

    IM通讯协议专题学习(三):由浅入深,从根上理解Protobuf的编解码原理

    意思是说如果数字本身比较大,那么其使用的比特位可以较多,但如果数字很小那么就应该使用较少的比特位表示,这就叫变长,随机应变,不死板。 那怎样变长呢?...7、Protobuf的有符号数表示 按照刚才变长编码的思想,-2147483646使用的比特位应该比-2要少。...然而我们知道在计算机世界中负数使用补码表示的,也就是说最高位(最左侧的比特位)一定是1,假设我们使用64位表示数字,那么如果我们依然用补码表示数字的话那么无论这个负数有多大还是多小都需要占据10个字节的空间...而Protobuf也一样,Protobuf也是一门语言,会将可读性较好的消息编码为二进制从而可以在网络中进行传播,而对端也可以将其解码回来。...在这里Protobuf中定义的消息就好比C语言,编码后的二进制消息就好比机器指令。 而Protobuf作为事实上语言必然有自己的语法。 其语法就是这样: 怎么样,还觉得编译原理没什么用吗?

    48140

    tensorflow:AToolDeveloperGuideToTFModelFIles

    概括来说就是,你在文本文件(text files)中定义数据结构,protobuf tools就会生成对应的C,Python和其它语言的类。我们可以用友好的方式加载,保存,访问这些类中的数据。...protobuf tools解析这个文本文件,然后生成代码用来加载,存储,和操作图定义。...name 每个节点(Node) 应该有一个唯一的标识符,图中的其它节点不能使用该标识符(这个标识符就是name属性对应的值)。...在训练过程中,权值通常不保存在 file format 中, 觉着对这句话更精确的解释是:在训练过程中保存模型的时候,是将 权值保存在 ckpt文件中的,回想一下 Saver, 在训练过程中,权值还是保存在内存中的...import text_format graph_def = tf.GraphDef() #因为是文本文件,所以mode='r',如果之前保存的是二进制文件 mode='rb' with open(

    1.4K50

    解决object_detectionprotos*.proto: No such file or directory

    完成上述步骤后,你的项目应该能够正常使用 TensorFlow Object Detection API 以及所遇到的所有 ​​*.proto​​ 文件。...*.proto​​​ 文件是 Protocol Buffers(简称为 Protobuf)中的文件类型,用于定义数据结构和消息格式。...下面是对 ​​​*.proto​​ 文件的详细介绍:定义数据结构:​​*.proto​​ 文件通过使用 Protobuf 的语法规则,定义了消息的字段和数据类型。...高效的数据序列化:​​*.proto​​ 文件定义了消息二进制格式,Protobuf 可以将消息序列化为紧凑的二进制字节流,以及将二进制字节流反序列化为消息。...相比于其他数据序列化方法,如 XML 或 JSON,Protobuf二进制格式更加紧凑,序列化和反序列化的速度更快,同时占用更少的存储空间和带宽。

    31620

    Protocol Buffers C++入门教程

    只要你使用以上语言,都可以用protobuf序列化和反序列化你的数据。 2.数据的序列化和反序列化 序列化 (Serialization):将数据结构或对象转换成二进制串的过程。...3.ProtoBuf的用法用例 protobuf相对而言效率应该是最高的,不管是安装效率还是使用效率,protobuf都很高效,而且protobuf不仅用于C++序列化,还可用于Java和Python的序列化...么需要知道ProtoBuf使用的一般步骤,下面以C++中使用ProtoBuf为例描述使用的一般步骤。...第三步: 使用protoco buffer的C++ API读写消息。 下面将具体讲解每一步的实现。 3.3定义proto文件 定义proto文件就是定义自己的数据存储或者传输的协议格式。...3.6使用Protocol Buffer读写消息 下面让我们尝试使用protobuf为我们产生的消息进行序列化和反序列的操作。

    12.9K25

    进行API开发选gRPC还是HTTP APIs?

    gRPC的优势 性能 gRPC消息使用一种有效的二进制消息格式protobuf进行序列化。Protobuf在服务器和客户机上的序列化非常快。...gRPC开发的核心文件是*.proto文件 ,它定义了gRPC服务和消息的约定。根据这个文件,gRPC框架将生成服务基类,消息和完整的客户端代码。...(想想,是用Post还是Get好?使用Get还是用Put好?一想到有选择恐惧症的你是不是又开了纠结,然后浪费了大量的时间) 该gRPC规范是规定有关gRPC服务必须遵循的格式。...默认情况下,gRPC消息使用protobuf编码。虽然protobuf的发送和接收效率很高,但它的二进制格式是不可读的。protobuf需要在*.proto文件中指定的消息接口描述才能正确反序列化。...需要额外的工具分析线路上的Protobuf有效负载,并手工编写请求。 存在诸如服务器反射和gRPC命令行工具等功能,以帮助处理二进制protobuf消息

    4K00

    【面试题精讲】Protobuf

    使用二进制编码表示数据,并且提供了自动生成代码的功能,以便在不同的编程语言中使用。 2. 为什么需要 Protobuf? 在分布式系统中,不同服务之间需要进行数据的传输和通信。...Protobuf 的实现原理 Protobuf 的实现原理主要包括以下几个方面: 定义消息结构:使用 Protobuf 的语言描述文件(.proto)定义数据的结构和字段类型。...这些描述文件可以指定消息的字段、嵌套消息、枚举等。 编译生成代码:通过使用 Protobuf 提供的编译器,将描述文件编译成目标语言的代码。...不适合人类可读的配置文件:由于 Protobuf 的主要目标是高效的数据传输和存储,因此不适合用作人类可读的配置文件格式。 7....总结 Protobuf 是一种高效的数据序列化协议,通过紧凑的二进制编码和自动生成的代码,提供了更快速、更小体积的数据传输和存储方式。

    76020

    Android:手把手带你分析 Protocol Buffer使用 源码

    由于 Google出品,相信Protocol Buffer已经具备足够的吸引力 今天,将讲解Protocol Buffer使用的源码分析,并解决以下两个问题: a....作用 通过将 结构化的数据 进行 串行化(序列化),从而实现 数据存储 / RPC 数据交换的功能 序列化: 将 数据结构或对象 转换成 二进制串 的过程 反序列化:将在序列化过程中所生成的二进制串...二进制串 对于C++,因为具有内存操作符,所以 二进制串 容易理解:C++的字符串可以直接被传输层使用,因为其本质上就是以 '\0' 结尾的存储在内存中的二进制串 对于 Java,二进制串 = 字节数组...extends MessageLiteOrBuilder { ... // 定义了一系列对 消息中字段操作的方法 // 下面会详细说明 } 下面,将按照Protocol Buffer的使用步骤逐步进行源码分析...采用T - L - V 的数据存储方式:减少了分隔符的使用 & 数据存储得紧凑 ---- 看完本文,你应该非常了解Protocol Buffer 的语法 & 如何去构建Protocol Buffer 的消息模型

    1.8K10

    全图文分析:如何利用Google的protobuf思考、设计、实现自己的RPC框架

    在下面的描述中,我会根据每一部分的主题,把这张图拆成不同的模块,从空间(文件和类的结构)和时间(函数的调用顺序、数据流向)这两个角度,描述图中的每一个元素,相信聪明的你一定会看明白的!...铺垫到这里,就可以更明确的再次重复一下了:这篇文章的目的,就是介绍如何利用 protobuf 实现图中的绿色部分的功能。...gRPC 就是利用了 protobuf实现了一个完整的 RPC 远程调用框架,其中的通信部分,使用的是 HTTP 协议。 ? 三、protobuf 基本使用 1....为了便于统一处理,我们把请求数据和响应数据都包装在一个统一的 RPC “数据结构”中,并用一个类型字段(type)区分:某个 RPC 消息是请求数据,还是响应数据。...Step10: 调用业务层客户端的函数来处理 RPC 结果 那么应该把这个二进制响应数据序列化到哪一个 response 对象上呢?

    1.6K40

    Carson带你学序列化:Google出品的序列化神器Protocol Buffer使用攻略

    由于 Google出品,相信Protocol Buffer已经具备足够的吸引力 今天,将详细介绍Protocol Buffer在Android平台 的具体使用 Carson带你学序列化Protocol...定义 一种 结构化数据 的数据存储格式(类似于 XML、Json ) Google 出品 (开源) Protocol Buffer 目前有两个版本:proto2 和 proto3 因为proto3 还是...作用 通过将 结构化的数据 进行 串行化(序列化),从而实现 数据存储 / RPC 数据交换的功能 序列化: 将 数据结构或对象 转换成 二进制串 的过程 反序列化:将在序列化过程中所生成的二进制串 转换成...protobuf-java:2.6.1' // 注:protobuf-java的版本 一定要和 安装protocobuffer的版本 一致 步骤3:具体在Android项目中使用 3.1 消息对象类介绍...3.1.1 消息对象类(Message类) 消息对象类 类通过 二进制数组 写 和 读 消息类型 使用方法包括: protocolBuffer.toByteArray

    1.2K20
    领券