1、开源地址:
https://github.com/google/protobuf/
2、发布版本下载:
https://github.com/google/protobuf/releases
3、什么是Protobuf
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、性能好,效率高
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 );
相关推荐
Protobuf,全称为Protocol Buffers,是Google开发的一种数据序列化协议,用于高效地存储和传输数据。它提供了一种语言无关、平台无关的方式,使得应用程序可以轻松地存储、读取和交换各种类型的数据。Protobuf的主要...
标题中的“protobuf在socket中运用客户端”指的是使用Google的Protocol Buffers(protobuf)协议来编码数据,并通过Socket通信协议在客户端进行数据传输的一种技术实践。Protocol Buffers是一种高效、跨平台的数据...
2. **数据预处理**:如果数据是结构化的,如protobuf对象,先将其序列化为字节流。 3. **加密**:使用libsodium提供的加密算法,如AES,对预处理后的字节流进行加密。 4. **传输**:将加密后的字节流发送到目的地。 ...
例如,在Python中,你可以创建一个`Person`对象,填充数据,然后将其序列化为字节流,或者从字节流中解析出`Person`对象: ```python import phonebook_pb2 person = phonebook_pb2.Person() person.name = 'Alice...
然后,我们将对象序列化为字节数组,再从字节数组中反序列化回`Person`对象。最后,我们遍历并打印出反序列化后的对象中的所有电话号码。 总结来说,Java Protobuf框架提供了高效的数据序列化和反序列化机制,适用...
Protocol Buffers(简称protobuf)是一种灵活高效的序列化结构数据的方式,由Google开发。它适用于多种语言环境,包括但不限于Java、C++等。本文将详细介绍如何使用Java来操作protobuf,主要内容分为三个部分:定义`...
虽然Thrift和Protobuf需要预先定义数据结构,但它们能生成高效、紧凑的字节码,适合对性能有高要求的场景。此外,还有其他序列化框架,如Hessian(Caucho公司开发)、FST(Fast Serialization Toolkit)和Avro,它们...
3. 序列化与反序列化:客户端需要有能力将接收到的字节流反序列化为protobuf对象,反之亦然。 最后,LCM(Language-agnostic Configuration Management)是另一个关键组件,它通常用于系统配置管理。在MQTT客户端中...
protobuf(Protocol Buffers)是Google推出的一种高效的数据序列化协议,它能将结构化的数据序列化为二进制流,以方便在网络上传输。protobuf.net是protobuf的.NET版本,它提供了一个高效的、与protobuf兼容的.NET...
为了应对这些挑战,豌豆荚实验室自主研发了PMP协议,并采用了Google的Protobuf作为数据交换格式。下面将详细介绍这两项技术。 ##### 1. PMP协议 PMP协议是专门为解决设备间通信而设计的一种协议。其主要特点包括:...
为了解决这些问题,需要使用专门的编解码框架,如Google的Protobuf、Facebok的Thrift、Jboss Marshalling、MessagePack等。 MessagePack是一个高效的二进制序列化框架,它像JSON一样支持不同的语言间的数据交换,...
3. 序列化数据:在Python程序中,创建数据对象并填充所需数据,然后使用protobuf库的SerializeToString()方法将数据序列化为字节串。 4. 转换为二维码兼容格式:将序列化的PB数据转换为适合编码为二维码的字符串,如...
- **Protobuf**:Google开发的一种数据交换格式。 **1.2.9 引用类型** - **虚引用**:最弱的一种引用关系,仅用来在GC时注册回调。 - **弱引用**:GC时会被回收的对象。 - **软引用**:内存不足时才会被回收的对象...
4. **性能优化**: 使用了高效的序列化和反序列化策略,比如Java的`java.io.Serializable`接口,或者更高级的Google Protobuf,以减少数据转换的开销。 5. **故障恢复**: 当Redis服务出现故障时,`tomcat-redis-...
- Asm:集成字节码操作框架,用于动态修改服务的处理逻辑。 - Protobuf:集成Google的Protocol Buffers,用于高效的结构化数据串行化。 - Grizzly:集成Grizzly网络框架,提升服务器端的性能。 3. 集成支持...
在Netty中,javassist被用来动态生成和修改字节码,这对于实现高性能网络框架至关重要。 3. **protobuf-java-2.5.0.jar**:Google的Protocol Buffers库,用于序列化结构化数据,可以生成Java代码,便于在Netty中...
C++可能使用自定义的序列化函数,或者库如Boost.Serialization或Google Protobuf。 6. **用户界面**:客户端的用户界面设计也是关键部分,可能使用Qt、wxWidgets或SDL等库来创建图形用户界面(GUI),使用户能够...
- **Protobuf**:Google的高效数据序列化协议,可以减少网络传输的数据量。 - **Java对象序列化**:将Java对象转换为字节流,便于在网络间传输或存储。 5. **数据库操作**: - **SQL与NoSQL**:存储用户信息、...
3. **Hession**:淘宝的 Rpc 框架,侧重于易用性和性能,支持动态类型和字节码序列化。 4. **Spring Cloud Netflix Ribbon** 和 **Eureka**:Spring Cloud 中的组件,提供客户端负载均衡和服务发现功能。 **五、...
JVM(Java Virtual Machine)是Java程序运行的基础,它负责执行字节码并管理内存。理解JVM的工作原理对于优化Java应用至关重要,包括垃圾收集机制、内存模型、类加载机制等。深入学习JVM有助于提升Java应用的性能,...