首页
学习
活动
专区
工具
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 是一种优秀的序列化格式,但并非完美无缺。

1.5K20

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

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

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

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

    2K30

    在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.7K90

    在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.3K10

    嵌入式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是什么我还是一脸懵逼~ NodeJS开发者为何要跟Protocol Buffer打交道 作为JavaScript开发者,对我们最友好的数据序列化协议当然是大名鼎鼎的...在大公司,最重要的就是优化效率、节省成本,因此二进制协议明显优于http这样的文本协议。 下面举两个简单的例子,应该有助于我们理解protobuf。...opt 是一个可选的成员,即消息中可以不包含该成员。1、2、3这几个数字是这三个字段的唯一标识符,这些标识符是用来在消息的二进制格式中识别各个字段的,一旦开始使用就不能够再改变。...编译 .proto 文件 我们可以使用protobuf.js提供的命令行工具来编译 .proto 文件 用法: # pbjs [options] [> outFile] 我们来看看

    5.3K11

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

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

    2.2K30

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

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

    69450

    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 还可以通过采用压缩算法来减少数据传输的大小。

    71050

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

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

    49840

    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 的二进制格式更加紧凑,序列化和反序列化的速度更快,同时占用更少的存储空间和带宽。

    36020

    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为我们产生的消息类来进行序列化和反序列的操作。

    13.1K25

    【Protobuf协议】001-Protobuf概述、定义Message类型

    它的设计非常适用于在网络通讯中的数据载体,很适合做数据存储或 RPC 数据交换格式,它序列化出来的数据量少,再加上以 K-V 的方式来存储数据,对消息的版本兼容性非常强,可用于通讯协议、数据存储等领域的语言无关...比如一个学生的信息,有学号、姓名、性别、年龄等; 这让我想起关系型数据库:关系型数据库按照结构化的方法存储数据; 5、与xml、json相比 xml、json也可以用来存储此类结构化数据,但是使用...我目前看来类似Java中的类 一个简单的.proto文件案例 syntax = "proto3"; // 指定protobuf版本,默认为proto2,必须在文件的第一行 message Student...这些字段编号用于以消息二进制格式标识字段,在使用消息类型后不应更改。...8、你的.proto文件生成了什么 当你使用protobuf编译器对.proto文件进行编译的时候,编译器将生成你所选语言的代码、你将需要处理的消息类型、你在文件中的描述,代码包括getter和setter

    13710

    【AI系统】推理文件格式

    下图中的ONNX使用的就是 Protobuf 这个序列化数据结构去存储神经网络的权重信息。...模型本身提供的自定义序列化方法模型可以提供自定义的序列化方法,这些方法可以是文本格式或者二进制格式。自定义的序列化方法通常是根据特定的模型结构和需求来设计的,以优化存储和传输效率。...例如,一些机器学习模型会输出人类可读的文本文件,包含模型参数和结构信息。二进制格式: 与 Protobuf 和 Flatbuffer 类似,这类自定义方法采用高效的二进制格式,提升存储和解析速度。...save函数可以将 R 对象序列化为二进制文件,支持复杂数据结构的高效存储和加载。这些语言级的序列化方法,提供了方便的接口,开发者可以根据需要选择最合适的方法来存储和加载模型或数据。Ⅳ....Protobuf 使用 3 位来表示线类型(Wire Type),其余部分表示字段号(Field Number)。

    9710

    转载:【AI系统】推理文件格式

    下图中的ONNX使用的就是 Protobuf 这个序列化数据结构去存储神经网络的权重信息。...模型本身提供的自定义序列化方法模型可以提供自定义的序列化方法,这些方法可以是文本格式或者二进制格式。自定义的序列化方法通常是根据特定的模型结构和需求来设计的,以优化存储和传输效率。...例如,一些机器学习模型会输出人类可读的文本文件,包含模型参数和结构信息。二进制格式: 与 Protobuf 和 Flatbuffer 类似,这类自定义方法采用高效的二进制格式,提升存储和解析速度。...save函数可以将 R 对象序列化为二进制文件,支持复杂数据结构的高效存储和加载。这些语言级的序列化方法,提供了方便的接口,开发者可以根据需要选择最合适的方法来存储和加载模型或数据。Ⅳ....Protobuf 使用 3 位来表示线类型(Wire Type),其余部分表示字段号(Field Number)。

    9810

    进行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

    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
    领券