4、protobuf简单教程
4.1、快速入门:
下载.exe编译器——编写.proto文件——利用编译器编译.proto文件生成javabean——引用jar包——直接使用javabean自带的序列化、反序列化方法
1、下载针对java的.exe编译器
protobuf编译器官方下载地址:https://developers.google.com/protocol-buffers/docs/downloads
下载不了的:点我
2、编写.proto文件
package tutorial; option java_package = "com.zjm.www.po"; option java_outer_classname = "Products2"; message Products22 { required string s1 = 1; required string s2 = 2; required string s3 = 3; required string s4 = 4; required string s5 = 5; required string s6 = 6; required string s7 = 7; required string s8 = 8; required string s9 = 9; required int32 i10 = 10; required int32 i11 = 11; required int32 i12 = 12; required int32 i13 = 13; required int32 i14 = 14; required int32 i15 = 15; required int32 i16 = 16; required int32 i17 = 17; required int32 i18 = 18; required bool b19 = 19; required bool b20 = 20; required bool b21 = 21; required bool b22 = 22; required bool b23 = 23; required bool b24 = 24; required bool b25 = 25; required bool b26 = 26; required bool b27 = 27; repeated string list = 28; }
View Code
其中的option java_package代表将要生成的javabean所有的包的包名
其中的option java_outer_classname代表要生成的javabean的类名
其中的message Products22可以理解为一个类似C语言的结构体,在生成的javabean中将变成一个内部类,一个.proto文件可以有无数个message
proto支持的类型与修饰符可参考该博客:http://blog.sina.com.cn/s/blog_abea023b0101dxce.html
3、利用编译器编译.proto文件生成javabean
把.proto文件放在.exe同个目录下面,打开cmd,进入同目录下,执行命令:
protoc.exe --java_out=./ test.proto
假如.proto文件没有编写错误的话,成功后在同目录下即有javabean的类生成。
4、引用jar包
jar包地址pom.xml:
<!-- protobuf --> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.0.0-alpha-2</version> </dependency>
5、把刚刚生成的javabean复制到项目中,这里直接使用javabean自带的序列化、反序列化方法
刚刚生成的javabean为:Products2
序列化例子:
public List<byte[]> serializeProtoBufProductsList( List<Builder> builderList) { if(builderList == null) { System.out.println("【ProtoBufSerializeServiceImpl-serializeProtoBufProductsService】builderList==null"); } long start = System.currentTimeMillis(); List<byte[]> bytesList = new ArrayList<byte[]>(); for(Products2.Products22.Builder p22Builder : builderList){ Products2.Products22 p22 = p22Builder.build(); byte[] bytes = p22.toByteArray(); bytesList.add(bytes); } long end = System.currentTimeMillis(); usedTime = end - start ; return bytesList; }
builder对象由来:com.zjm.www.po.Products2.Products22.Builder,即可有生成的javabean点出来。
反序列化例子:
public List<Products22> deserializeProtoBufDataListToProducts22List( List<byte[]> bytesList) { long start = System.currentTimeMillis(); List<Products22> list = new ArrayList<Products22>(); for(byte[] b : bytesList) { try { list.add(Products2.Products22.parseFrom(b)); } catch (InvalidProtocolBufferException e) { e.printStackTrace(); } } long end = System.currentTimeMillis(); usedTime = end - start; return list; }
拿出具体字段例子:
Products22 p = Products2.Products22.parseFrom(b); String s1 = p.getS1(); int i1 = p.getI10(); boolean b1 = p.getB19(); ProtocolStringList l = p.getListList(); for(String s : l) { }
5、protostuff简单教程
5.1 快速入门
引用jar包——学习语法——直接使用
1、引用jar包:
pom.xml:
<!-- protostuff --> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.0.7</version> <optional>true</optional> <scope>provided</scope> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.0.7</version> <optional>true</optional> <scope>provided</scope> </dependency>
2、javabean:
同上面xml的javabean
3、序列化例子:
public List<byte[]> serializeProtoStuffProductsList(List<Products> pList) { if(pList == null || pList.size() <= 0) { return null; } long start = System.currentTimeMillis() ; List<byte[]> bytes = new ArrayList<byte[]>(); Schema<Products> schema = RuntimeSchema.getSchema(Products.class); LinkedBuffer buffer = LinkedBuffer.allocate(4096); byte[] protostuff = null; for(Products p : pList) { try { protostuff = ProtostuffIOUtil.toByteArray(p, schema, buffer); bytes.add(protostuff); } finally { buffer.clear(); } } long end = System.currentTimeMillis() ; this.userTime = end - start; return bytes; }
4、反序列化例子:
public List<Products> deserializeProtoStuffDataListToProductsList( List<byte[]> bytesList) { if(bytesList == null || bytesList.size() <= 0) { return null; } long start = System.currentTimeMillis() ; Schema<Products> schema = RuntimeSchema.getSchema(Products.class); List<Products> list = new ArrayList<Products>(); for(byte[] bs : bytesList) { Products product = new Products(); ProtostuffIOUtil.mergeFrom(bs, product, schema); list.add(product); } long end = System.currentTimeMillis() ; this.userTime = end - start; return list; }
相关推荐
本Demo将展示如何在Unity中集成并使用Protobuf进行数据的序列化和反序列化操作。 首先,你需要了解什么是序列化和反序列化。序列化是将对象的状态转换为可以存储或传输的数据格式的过程,而反序列化则是将这些数据...
开发者可以使用protobuf编译器将.proto文件编译成Java、C++、Python等语言的类,这些类提供了序列化和反序列化的方法。protobuf的优势在于它产生的代码执行速度快,序列化后的数据体积小,且具有良好的版本兼容性。 ...
protobuf序列化和反序列化技术是大数据处理领域中不可或缺的一部分,尤其在实时大数据场景下,高效的数据传输和存储对性能有着直接影响。谷歌推出的Protocol Buffers(简称protobuf)是一种语言无关、平台无关的数据...
使用protobuf编译器,可以将.proto文件转换为特定语言的源代码,生成对应的序列化和反序列化接口。在Java中,这些接口通常是一些静态方法,用于将对象转换为字节流(序列化)和从字节流恢复对象(反序列化)。 **...
总结来说,这个未知名称的库提供了与Google Protobuf类似的功能,专为C语言设计,允许开发者在XML、JSON和二进制之间灵活地序列化和反序列化数据结构。它对于需要在C环境中处理复杂数据交换的项目,尤其是那些关注...
综上所述,这个压缩包提供了一种自定义实现的protobuf压缩解决方案,包括了protobuf的序列化和反序列化功能,以及可能的压缩算法实现。通过阅读协议文档和简介,我们可以更深入地了解数据格式和使用方法,而核心代码...
消息序列化与反序列化是IT领域中一个关键的概念,特别是在分布式系统、网络通信和数据存储中。这个过程涉及到将对象或数据结构转换为可传输的格式,然后在接收端还原为原来的对象或数据结构。这允许不同系统之间有效...
例如,JSON、XML、protobuf等轻量级序列化库提供了更高效、更安全的数据交换方式。 为了克服这些问题,开发者可以考虑使用第三方序列化库,如Google的Protocol Buffers (protobuf)、Apache Avro或Jackson的JSON序列...
标题中的"protobuf序列化JAVA使用的JAR包V3.15"指的是protobuf的Java实现,版本为3.15,以JAR(Java Archive)的形式提供。JAR文件是Java平台特有的归档文件,包含了编译后的类文件和其他资源,使得开发者可以直接...
1. **序列化框架**: Protostuff提供了一种灵活的方式来序列化和反序列化Java对象,支持多种数据格式,如JSON、XML、Protocol Buffers(protobuf)、YAML等。它不仅适用于基本类型,还支持自定义对象和复杂的对象图...
本篇文章将深入探讨在Unity5中如何使用Protocol Buffers(简称Protobuf)进行序列化和反序列化操作,以及它如何解决跨平台解析问题。 1. **什么是Protobuf?** Protocol Buffers是Google推出的一种高效的数据序列...
在IT行业中,XML文件的序列化与反序列化是两个重要的概念,它们对于数据的存储、传输和处理起着关键作用。 **1. XML文件序列化** XML文件序列化是指将程序中的对象转换为XML格式的字符串或文件的过程。这个过程通常...
在Java中,可以使用`java.io.Serializable`接口标记一个类为可序列化的,然后使用`ObjectOutputStream`来序列化对象,而`ObjectInputStream`则用于反序列化。 在描述的"序列化与反序列化Demo"中,我们可以推测这...
一、Java对象序列化与反序列化 1. **序列化**: 序列化是将Java对象转换为字节流的过程,以便于存储或传输。通过实现`java.io.Serializable`接口,一个Java对象可以获得序列化的能力。序列化不仅可以保存对象的状态...
本文将深入探讨protobuf的工作原理、使用方法、序列化与反序列化过程,以及如何使用protobuf工具类。 1. **protobuf工作原理** protobuf通过定义.proto文件来描述数据结构,这些文件包含了消息类型、字段、字段...
在这个主题中,我们将深入探讨四种常用的序列化工具:Gson, Jackson, FastJson和ProtoBuf,以及与ProtoBuf相关的`proto.exe`工具。 1. Gson(Google Gson): Gson是由Google提供的Java库,用于将Java对象转换为...
- 考虑使用其他序列化框架,如protobuf、JSON或XML,它们可能提供更好的性能和更小的序列化数据大小。 总之,Java的序列化和反序列化是处理对象持久化和网络传输的关键技术,但在使用过程中需要注意安全性和性能...
在C#中,我们可以使用System.Xml.Serialization命名空间中的XmlSerializer类来实现XML序列化和反序列化。通过创建一个XmlSerializer实例,指定要序列化的类型,然后调用其Serialize方法,即可将对象转换为XML字符串...
标题中的"protobuf例子"指的是Google开发的一种数据序列化协议缓冲区(Protocol Buffers)的示例。Protocol Buffers是一种高效、灵活且易于使用的结构化数据序列化方法,类似于XML、JSON,但更小、更快、更简单。它...