Java数据通讯中使用Googgle Protobuf 序列化与反序列化
概念
1.什么是protocol buffer
ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。
1. google官方连接地址 http://code.google.com/p/protobuf/downloads/list
2. 选择proto.exe压缩包protoc-2.4-win32.zip和protobuf-java-2.4.1.jar压缩包protobuf-2.4.zip
3.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同,否则可能出现编译通不过现象)
4.在proto.exe同级目录,编写一个netbean.proto文件,为需要序列化的数据接口加入一个message属性,为每一个字段指定名称和类型,如下所示(message 的名称不能与java_outer_classname 名称相同,不然编译不过 ):
package com.leehongee.netserver.net.bean;
option java_package = "com.leehongee.netserver.net.bean";
option java_outer_classname = "Request";
message request_Net {
required string cmd = 1;
optional int32 keycode = 2;
optional sint32 posX = 3;
optional sint32 posY = 4;
optional bool onOrOff = 5;
optional bool ontouch = 6;
}
备注:限定修饰符 required ,optional ,repeated
required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。
optional:表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。
repeated:表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值。
5.使用CMD命令编译这个netbean.proto文件:
D:\protoc-2.4.1-win32>protoc.exe --java_out=./ netbean.proto
6.在目录com\leehongee\netserver\net\bean 目录下将生成一个Request.java源文件,并将其引入到Myeclipse中
7.把jar包protobuf-java-2.4.1.jar也引入到工程libs目录中
8.使用方法调用序列化:
Request .request_Net .Builder builder=Request .request_Net ..newBuilder();
builder.setCmd("ontouch");
Request .request_Net request=builder.builder();
byte[] buffer=request.toByteAarray();
9.使用反序列化:
try{
Request .request_Net request = Request .request_Net .parseFrom(buffer);
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
Java数据通讯中使用Googgle Protobuf 序列化与反序列化的更多相关文章
- C#中json字符串的序列化和反序列化
改文章转自:https://www.cnblogs.com/shang201215019/p/7907655.html 什么是 Json ? Json[javascript对象表示方法] ...
- 在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出MethodArgumentNotValidException异常,因此,只需要在ExceptionHandler类中添加处理对应异常的方法即可。
在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出Method ...
- Unity中进程间通信——使用Protobuf-net序列化与反序列化
基于ProtoBuf协议实现网络传输(上) Protobuf 全称Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格 ...
- MessagePack Java 0.6.X 多种类型变量的序列化和反序列化(serialization/deserialization)
类 Packer/Unpacker 允许序列化和反序列化多种类型的变量,如后续程序所示.这个类启用序列化和反序列化多种类型的变量和序列化主要类型变量以及包装类,String 对象,byte[] 对象, ...
- java oop第12章_IO、序列化和反序列化
引言:数据通常通过文件系统保存在外存中,有时需要将他们读取到程序中进行一些操作,Java针对文件系统的操作提供了一套规范,即IO,针对计算机内存而言,输入的称为输入流,输出的称为输出流. 一. ...
- 在C#中,Json的序列化和反序列化的几种方式总结
在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象. 什么是JSON? JSON (JavaScript Object Notation) ...
- C#中的Json的序列化和反序列化
Json是一种通用的数据格式,我们在数据交换的时候,经常会用到,下面介绍c#中的json序列化和反序列化,当然也可用在asp.net,silverlight,wpf中.我们在下面实例讲解如何进行Jso ...
- Java基础IO流(四)序列化与反序列化
对象的序列化与反序列化: 对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化. 序列化流(ObjectOutInputStream),是过滤流 -------writeObjec ...
- 在C#中,Json的序列化和反序列化的几种方式总结 转载
转载自 https://www.cnblogs.com/caofangsheng/p/5687994.html 谢谢 在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据 ...
随机推荐
- [IOS]开源库RegexKitLite正则表达式的使用
1.去RegexKitLite下载类库,解压出来会有一个例子包及2个文件,其实用到的就这2个文件,添加到工程中. 2.工程中添加libicucore.dylib frameworks. 友情提醒:一般 ...
- spring cloud 路由Zuul的高可用
Zuul的高可用非常关键,因为外部请求到后端微服务的流量都会经过Zuul.故而在生产环境中,我们一般都需要部署高可用的Zuul以避免单点故障. 笔者分两种场景讨论Zuul的高可用. Zuul客户端也注 ...
- poj 1868 Antiarithmetic? 推断序列中是否有等差子序列
#include<iostream> using namespace std; const int maxN=10024; int n,vis[maxN],a[maxN]; bool fi ...
- lua -- encode and decode
json.encode 将表格数据编码为 JSON 字符串. 格式: jsonString = json.encode(表格对象) 用法示例: ,b=,c2=},d={,},}) echo(str) ...
- linux命令(36):vimdiff文件对比
启动方法 首先保证系统中的diff命令是可用的.Vim的diff模式是依赖于diff命令的.Vimdiff的基本用法就是: # vimdiff FILE_LEFT FILE_RIGHT 或者 # vi ...
- js实现文本框文本域光标处插入图片文本的插件(并且光标在插入内容的内容后显示)
js: /******************************************* * * 插入光标处的插件 * @authors Du xin li * @update 2015 ...
- Ubuntu 系统下卸载 IntelliJ IDEA
参考:http://blog.csdn.net/csdnones/article/details/50449947 卸载只需要删除解压出来的目录就行了,然后删除/home/你用登录名/IntelliJ ...
- vs2015利用python加载dll调试配置
python调用dll相对而言比较方便,写个脚本调试轻松工作,快乐生活. python脚本 from ctypes import * import time # 脚本挂起 input() # load ...
- mysql性能优化(一)
随着项目的上线,关注开始关注服务器的运维和优化,其中后端数据库状态查看和参数调优是比不可少的一步,可能用到的两个小工具: mysqltuner.pl tuning-primer.sh 参考: [1] ...
- Javascript eval()函数 基础回顾
如果您想详细了解ev al和JSON请参考以下链接: eval :https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Glo ...