`
gaojingsong
  • 浏览: 1210340 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【java 之ProtocolBuffer介绍】

阅读更多

 ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。  protobuf(Google Protocol Buffers)是Google提供一个具有高效的协议数据交换格式工具库(类似Json),但相比于Json,Protobuf有更高的转化效率,时间效率和空间效率都是JSON的3-5倍。后面将会有简单的demo对于这两种格式的数据转化效率的对比。

 



 

Protobuf 提供了C++、Java、Python语言的支持,提供了windows(proto.exe)和Linux平台动态编译生成proto文件对应的源文件。proto文件定义了协议数据中的实体结构(message ,field)

关键字message: 代表了实体结构,由多个消息字段(field)组成。

消息字段(field): 包括数据类型、字段名、字段规则、字段唯一标识、默认值

数据类型:常见的原子类型都支持(在FieldDescriptor::kTypeToName中有定义)

 

字段规则:(在FieldDescriptor::kLabelToName中定义)

required:必须初始化字段,如果没有赋值,在数据序列化时会抛出异常

optional:可选字段,可以不必初始化。

repeated:数据可以重复(相当于java 中的Array或List)

字段唯一标识:序列化和反序列化将会使用到。

默认值:在定义消息字段时可以给出默认值。

 

 

protobuf有什么用?

Xml、Json是目前常用的数据交换格式,它们直接使用字段名称维护序列化后类实例中字段与数据之间的映射关系,一般用字符串的形式保存在序列化后的字节流中。消息和消息的定义相对独立,可读性较好。但序列化后的数据字节很大,序列化和反序列化的时间较长,数据传输效率不高。

Protobuf和Xml、Json序列化的方式不同,采用了二进制字节的序列化方式,用字段索引和字段类型通过算法计算得到字段之前的关系映射,从而达到更高的时间效率和空间效率,特别适合对数据大小和传输速率比较敏感的场合使用。

 

优缺点

优点:通过以上的时间效率和空间效率,可以看出protobuf的空间效率是JSON的2-5倍,时间效率要高,对于数据大小敏感,传输效率高的模块可以采用protobuf库

缺点:消息结构可读性不高,序列化后的字节序列为二进制序列不能简单的分析有效性;目前使用不广泛,只支持java,C++和Python;

 

 

 

 

 

 

  • 大小: 10.6 KB
0
0
分享到:
评论

相关推荐

    Protocol Buffer java版本

    标题中的"Protocol Buffer java版本"指的是Protocol Buffer支持Java语言的实现。 在Java中,Protocol Buffer提供了SDK,允许开发者定义数据结构(称为.proto文件),然后生成对应的Java类,这些类可以用来序列化和...

    protocolbuffer

    ProtocolBuffer,简称PB,是由Google开发的一种数据序列化协议,它是Google的一种二进制数据交换格式,用于结构化数据的序列化。Protocol Buffers的设计目标是替代XML等传统数据交换格式,提供更高效、更小的数据...

    01 Protocol Buffer技术详解(语言规范).doc

    Protocol Buffer 中存在一张类型对照表,用于将 Protocol Buffer 中的数据类型与其他编程语言(C++/Java)中的类型进行对照。该对照表将在后面给出。 Protocol Buffer 的优点 1. 保持良好的风格和系统性 2. 结合...

    Protocol Buffer编译工具包

    2. **Java库**:编译后的Java代码依赖于Protocol Buffer的Java库,它提供了序列化和反序列化的API。这个库包含了`com.google.protobuf`包,其中包含`Message`接口和`Builder`类等核心组件,用于创建和操作Protocol ...

    protocol buffer

    Protocol Buffer(简称protobuf)是Google开发的一种数据序列化协议,它是跨平台、语言无关的,用于结构化数据的高效序列化方法。protobuf提供了一种方式将数据结构定义为.proto文件,然后可以使用protobuf编译器...

    Protocol Buffer

    2. **编译器**:`protoc`是Protocol Buffer提供的编译器,它可以将.proto文件编译成不同编程语言(如C++、Java、Python等)的源代码,生成的类库提供了序列化和反序列化的接口。 3. **序列化与反序列化**:Protocol...

    Protocol Buffer 3.0 C++

    4. **跨平台和跨语言兼容性**: Protocol Buffer 3.0 改进了跨平台和跨语言的兼容性,不仅支持C++,还支持Java、Python等多种编程语言。这意味着定义的数据结构可以在不同语言的系统之间无缝共享。 5. **性能优化**:...

    Protocol Buffer序列化对比Java序列化.

    - Protocol Buffer:PB的设计目标之一就是跨语言兼容,它支持多种编程语言,包括C++、Java、Python等,方便多语言环境下的数据交换。 - Java序列化:主要针对Java平台,跨语言支持较差,若要在非Java环境中使用,...

    protocol buffer jar架包和Windows下的代码生成工具

    Protocol Buffer(简称protobuf)是Google开发的一种数据序列化协议,用于高效、跨平台地存储和传输结构化数据。它能够将复杂的数据结构转换为二进制格式,以便在网络通信和文件存储中使用,大大减少了数据的存储...

    ProtocolBuffer

    【Protocol Buffer】是一种高效的数据序列化协议,由Google公司开发并开源。它主要用于结构化数据的描述、传输和存储,其设计目标是提供一种高效、紧凑的二进制数据格式,相比XML和JSON等文本格式,它能显著减少数据...

    Protocol_Buffer官网文档中文版

    - **Protocol Buffer**是一种用于数据序列化的高效工具,支持多种编程语言(如Java、C++、Python等),能够实现数据的有效存储和传输。 #### 二、概念与工作原理 1. **概念介绍** - **Protocol Buffer**:一种...

    Protocol Buffer配置及实例

    通过以上介绍,我们可以了解到 Protocol Buffers 的强大之处在于其高效的序列化能力和跨语言的兼容性。无论是对于客户端与服务器之间的通信还是数据持久化,Protocol Buffers 都能够提供可靠且高性能的支持。

    protocol buffer 3.0.0

    在"Protocol Buffer 3.0.0"中,最重要的变化之一是弃用了.proto文件中的“required”字段类型。在旧版本中,"required"字段必须在消息实例中出现且不能为null,这可能导致编码和解码时的错误。在v3中,"required"被...

    数据交换格式-protocol buffer

    它提供了强大的数据描述语言,开发者可以在.proto文件中定义数据结构,然后 Protocol Buffer 编译器会根据这些定义生成对应语言(如C++、Java、Python等)的源代码,便于在代码中使用。这些数据结构不仅可以在本地...

    cocos2d-x protocol buffer android 工程

    Protocol Buffer(简称protobuf)是Google推出的一种数据序列化协议,它能够将结构化数据序列化,可用于数据存储、通信协议等方面。本项目结合了cocos2d-x与protobuf,旨在为Android平台的游戏开发提供高效的数据...

    protocol Buffer

    **Protocol Buffer:谷歌的高效序列化框架** Protocol Buffers(简称protobuf)是由谷歌公司开发的一种高效、跨平台的数据序列化协议。它允许开发者定义数据结构,然后将这些数据结构转换成二进制格式进行存储或在...

    ProtocolBuffer for java(android)

    **ProtocolBuffer for Java(Android)详解** Protocol Buffer(简称ProtoBuf)是Google开发的一种数据序列化协议,它能够将结构化的数据序列化,可用于数据存储、通信协议等方面。 ProtoBuf 提供了高效的编码和解码...

Global site tag (gtag.js) - Google Analytics