`
hpgary
  • 浏览: 82906 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

google protobuf 对象转字节码

    博客分类:
  • Java
 
阅读更多

1、开源地址:

https://github.com/google/protobuf/

2、发布版本下载:

https://github.com/google/protobuf/releases

 

3、什么是Protobuf

官方文档给出的是:

 

a language-neutral, platform-neutral, extensible way of serializing structured data for use in communications protocols, data storage, and more.

 

3、数据类型

 

.proto

 

 

 

Type

Notes C++ Type Java Type
double    double  double
float    float  float
int32 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.  int32  int
int64 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.  int64  long
uint32 Uses variable-length encoding.  uint32  int
uint64 Uses variable-length encoding.  uint64  long
sint32 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.  int32  int
sint64 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.   int64  long
fixed32 Always four bytes. More efficient than uint32 if values are often greater than 228  uint32  int
fixed64 Always eight bytes. More efficient than uint64 if values are often greater than 256.  uint64  long
sfixed32 Always four bytes.  int32  int
sfixed64 Always eight bytes.  int64  long
bool    bool  boolean
string A string must always contain UTF-8 encoded or 7-bit ASCII text.  string  String
bytes May contain any arbitrary sequence of bytes. string ByteString

  

 

 5、Protobuf的优点

1、性能好,效率高

2、代码生成机制,数据解析类自动生成

3、支持向后兼容和向前兼容

4、支持多种编程语言(java,c++,python)

 

6、Protobuf的缺点

1、应用不够广

2、二进制格式导致可读性差(二进制格式)

3、缺乏自描述

 

7、Protobuf环境的搭建

根据不同操作系统下载不同的发布版本

https://github.com/google/protobuf/releases,

 

8、新建第一个proto文件

文件名为:ResponseMsg.proto

option java_package = "io.hpgary.netty.pb"; //生成java的包名
option java_outer_classname = "ResponseMsgProbuf"; // 生成java的类名
  
message  ResponseMsg {
    required bytes response = 1;
}

9、转换成为java类:

使用命令:

# ../java 是源代码所在目录
protoc.exe --java_out ../java ResponseMsg.proto

 

10、使用:

ByteString byteString = ByteString.copyFrom("aaa".getBytes());
RequestMsg.Builder requstMsg = RequestMsg.newBuilder();
requstMsg.setCmd("hp_call");
requstMsg.setRequestParam( byteString );

 

 

 

分享到:
评论

相关推荐

    protoc(Protobuf解码解密工具)用于无原始类时反编译数据,结构分析.rar

    Protobuf,全称为Protocol Buffers,是Google开发的一种数据序列化协议,用于高效地存储和传输数据。它提供了一种语言无关、平台无关的方式,使得应用程序可以轻松地存储、读取和交换各种类型的数据。Protobuf的主要...

    protobuf 在socket中运用 客户端

    标题中的“protobuf在socket中运用客户端”指的是使用Google的Protocol Buffers(protobuf)协议来编码数据,并通过Socket通信协议在客户端进行数据传输的一种技术实践。Protocol Buffers是一种高效、跨平台的数据...

    dotnet-StreamCryptor流加密和解密利用libsodium和protobuf

    2. **数据预处理**:如果数据是结构化的,如protobuf对象,先将其序列化为字节流。 3. **加密**:使用libsodium提供的加密算法,如AES,对预处理后的字节流进行加密。 4. **传输**:将加密后的字节流发送到目的地。 ...

    protobuf 小例子 电话薄 源码

    例如,在Python中,你可以创建一个`Person`对象,填充数据,然后将其序列化为字节流,或者从字节流中解析出`Person`对象: ```python import phonebook_pb2 person = phonebook_pb2.Person() person.name = 'Alice...

    Java_protobuf框架使用向导

    然后,我们将对象序列化为字节数组,再从字节数组中反序列化回`Person`对象。最后,我们遍历并打印出反序列化后的对象中的所有电话号码。 总结来说,Java Protobuf框架提供了高效的数据序列化和反序列化机制,适用...

    protobuf入门

    Protocol Buffers(简称protobuf)是一种灵活高效的序列化结构数据的方式,由Google开发。它适用于多种语言环境,包括但不限于Java、C++等。本文将详细介绍如何使用Java来操作protobuf,主要内容分为三个部分:定义`...

    手写RPC框架1

    虽然Thrift和Protobuf需要预先定义数据结构,但它们能生成高效、紧凑的字节码,适合对性能有高要求的场景。此外,还有其他序列化框架,如Hessian(Caucho公司开发)、FST(Fast Serialization Toolkit)和Avro,它们...

    mqtt客户端程序实现发布及订阅

    3. 序列化与反序列化:客户端需要有能力将接收到的字节流反序列化为protobuf对象,反之亦然。 最后,LCM(Language-agnostic Configuration Management)是另一个关键组件,它通常用于系统配置管理。在MQTT客户端中...

    [源码下载]Demo2.模拟简单登陆-源码基于networkcomms2.3.1

    protobuf(Protocol Buffers)是Google推出的一种高效的数据序列化协议,它能将结构化的数据序列化为二进制流,以方便在网络上传输。protobuf.net是protobuf的.NET版本,它提供了一个高效的、与protobuf兼容的.NET...

    Android DevCamp幻灯片分享:发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥

    为了应对这些挑战,豌豆荚实验室自主研发了PMP协议,并采用了Google的Protobuf作为数据交换格式。下面将详细介绍这两项技术。 ##### 1. PMP协议 PMP协议是专门为解决设备间通信而设计的一种协议。其主要特点包括:...

    使用Netty进行编解码的操作过程详解

    为了解决这些问题,需要使用专门的编解码框架,如Google的Protobuf、Facebok的Thrift、Jboss Marshalling、MessagePack等。 MessagePack是一个高效的二进制序列化框架,它像JSON一样支持不同的语言间的数据交换,...

    pb生成二维码.rar_pb_pb 二维码_二维码

    3. 序列化数据:在Python程序中,创建数据对象并填充所需数据,然后使用protobuf库的SerializeToString()方法将数据序列化为字节串。 4. 转换为二维码兼容格式:将序列化的PB数据转换为适合编码为二维码的字符串,如...

    Java工程师应用技术汇总

    - **Protobuf**:Google开发的一种数据交换格式。 **1.2.9 引用类型** - **虚引用**:最弱的一种引用关系,仅用来在GC时注册回调。 - **弱引用**:GC时会被回收的对象。 - **软引用**:内存不足时才会被回收的对象...

    tomcat-redis-session-manager-2.0.0.zip

    4. **性能优化**: 使用了高效的序列化和反序列化策略,比如Java的`java.io.Serializable`接口,或者更高级的Google Protobuf,以减少数据转换的开销。 5. **故障恢复**: 当Redis服务出现故障时,`tomcat-redis-...

    Dubbo框架扩展

    - Asm:集成字节码操作框架,用于动态修改服务的处理逻辑。 - Protobuf:集成Google的Protocol Buffers,用于高效的结构化数据串行化。 - Grizzly:集成Grizzly网络框架,提升服务器端的性能。 3. 集成支持...

    Netty4&5源码编译所需jar包

    在Netty中,javassist被用来动态生成和修改字节码,这对于实现高性能网络框架至关重要。 3. **protobuf-java-2.5.0.jar**:Google的Protocol Buffers库,用于序列化结构化数据,可以生成Java代码,便于在Netty中...

    基于C++的聊天系统客户端

    C++可能使用自定义的序列化函数,或者库如Boost.Serialization或Google Protobuf。 6. **用户界面**:客户端的用户界面设计也是关键部分,可能使用Qt、wxWidgets或SDL等库来创建图形用户界面(GUI),使用户能够...

    java即时通讯im源码

    - **Protobuf**:Google的高效数据序列化协议,可以减少网络传输的数据量。 - **Java对象序列化**:将Java对象转换为字节流,便于在网络间传输或存储。 5. **数据库操作**: - **SQL与NoSQL**:存储用户信息、...

    Rpc 轻量级架构框架

    3. **Hession**:淘宝的 Rpc 框架,侧重于易用性和性能,支持动态类型和字节码序列化。 4. **Spring Cloud Netflix Ribbon** 和 **Eureka**:Spring Cloud 中的组件,提供客户端负载均衡和服务发现功能。 **五、...

    java:java方面的小组件

    JVM(Java Virtual Machine)是Java程序运行的基础,它负责执行字节码并管理内存。理解JVM的工作原理对于优化Java应用至关重要,包括垃圾收集机制、内存模型、类加载机制等。深入学习JVM有助于提升Java应用的性能,...

Global site tag (gtag.js) - Google Analytics