
本文共 3321 字,大约阅读时间需要 11 分钟。
目前,在网络通信和通用数据交换等应用场景中经常使用的技术是 JSON 或 XML,而在最近的开发中接触到了 Google 的 ProtoBuf。ProtoBuf是Google开源的一种数据传输协议,类似于XML、JSON等技术,优点是ProtoBuf序列化和反序列化的性能非常好,灵活,高效,自动,跨平台,跨语言,最主要的是它的代码生成机制。只要写一个.proto数据文件,再用编译器编译一下,可以编译成对应语言的代码。
protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。ProtoBuf 是结构数据序列化方法,序列化:将结构数据或对象转换成能够被存储和传输(例如网络传输)的格式,同时应当要保证这个序列化结果在之后(可能在另一个计算环境中)能够被重建回原来的结构数据或对象。
* XML、JSON、ProtoBuf 都具有数据结构化和数据序列化的能力
* XML、JSON 更注重数据结构化,关注人类可读性和语义表达能力。ProtoBuf 更注重数据序列化,关注效率、空间、速度,人类可读性差,语义表达能力不足(为保证极致的效率,会舍弃一部分元信息)
* ProtoBuf 的应用场景更为明确,XML、JSON 的应用场景更为丰富。
在Java中使用protobuf需要jar包,下载protobuf-Java-***.jar包文件,添加到项目中即可,实例如下:
pom.xml文件UTF-8 3.3.0 1.6.1 com.google.protobuf protobuf-java ${protobuf.version} io.grpc grpc-netty ${grpc.version} provided io.grpc grpc-protobuf ${grpc.version} provided io.grpc grpc-stub ${grpc.version} provided kr.motd.maven os-maven-plugin 1.5.0.Final org.xolstice.maven.plugins protobuf-maven-plugin 0.5.0 com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier} grpc-java io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier} compile compile-custom
***.proto文件syntax = "proto2";//package com;option java_package = "com.protobuf";option java_outer_classname = "Model";message Student { required int64 id = 1; required int32 age = 2; required string name = 3;}
在maven 的projects视图中选择 protobuf:compile命令执行即可生成对应的类文件。(注意proto文件夹存放在main文件夹下)
public class Test { public static void main(String[] args) { // 序列化 Model.Student.Builder builder = Model.Student.newBuilder(); builder.setId(1L).setName("2").setAge(3); Model.Student student = builder.build(); System.out.println(student.toString()); // 反序列化 byte[] bytes = student.toByteArray(); System.out.println(bytes); try { Model.Student d = Model.Student.parseFrom(bytes); System.out.println(d.toString()); } catch (InvalidProtocolBufferException e) { e.printStackTrace(); } }}
结果:
id: 1
age: 3 name: "2"
转载地址:https://blog.csdn.net/leijie0322/article/details/116245436 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关于作者
