概念

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 序列化与反序列化的更多相关文章

  1. C#中json字符串的序列化和反序列化

    改文章转自:https://www.cnblogs.com/shang201215019/p/7907655.html 什么是 Json ?        Json[javascript对象表示方法] ...

  2. 在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出MethodArgumentNotValidException异常,因此,只需要在ExceptionHandler类中添加处理对应异常的方法即可。

    在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出Method ...

  3. Unity中进程间通信——使用Protobuf-net序列化与反序列化

    基于ProtoBuf协议实现网络传输(上) Protobuf 全称Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格 ...

  4. MessagePack Java 0.6.X 多种类型变量的序列化和反序列化(serialization/deserialization)

    类 Packer/Unpacker 允许序列化和反序列化多种类型的变量,如后续程序所示.这个类启用序列化和反序列化多种类型的变量和序列化主要类型变量以及包装类,String 对象,byte[] 对象, ...

  5. java oop第12章_IO、序列化和反序列化

    引言:数据通常通过文件系统保存在外存中,有时需要将他们读取到程序中进行一些操作,Java针对文件系统的操作提供了一套规范,即IO,针对计算机内存而言,输入的称为输入流,输出的称为输出流. 一.     ...

  6. 在C#中,Json的序列化和反序列化的几种方式总结

    在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象. 什么是JSON? JSON (JavaScript Object Notation) ...

  7. C#中的Json的序列化和反序列化

    Json是一种通用的数据格式,我们在数据交换的时候,经常会用到,下面介绍c#中的json序列化和反序列化,当然也可用在asp.net,silverlight,wpf中.我们在下面实例讲解如何进行Jso ...

  8. Java基础IO流(四)序列化与反序列化

    对象的序列化与反序列化: 对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化. 序列化流(ObjectOutInputStream),是过滤流 -------writeObjec ...

  9. 在C#中,Json的序列化和反序列化的几种方式总结 转载

    转载自  https://www.cnblogs.com/caofangsheng/p/5687994.html    谢谢 在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据 ...

随机推荐

  1. 【Unity】7.1 Input类的方法和变量

    分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 在Input类中,Key与物理按键对应,例如键盘.鼠标.摇杆上的按键,其映射关系无法改变,程序员可以通过按键名称或者按键 ...

  2. sql 中的 STUFF()使用说明,以及千分位的常用函数

    STUFF 删除指定长度的字符并在指定的起始点插入另一组字符. 语法 STUFF ( character_expression , start , length , character_express ...

  3. git clean 小结

    删除 一些 没有 Git add 的 文件: git clean 参数 -n 显示 将要 删除的 文件 和  目录 -f 删除 文件,-df 删除 文件 和 目录 git clean -n git c ...

  4. distinct aggregation

    https://docs.google.com/document/d/1zj6OA-K2hi7ah8Fo-xTQB-mVmYfm6LsN2_NHgTCVmJI/edit# https://issues ...

  5. ZOOKEEPER解惑[转]

    今年年初的时候,写了一篇ZooKeeper的入门文章<初识ZooKeeper>,一直到这一周,才有时间将ZooKeeper整个源码通读了一遍.不能说完全理解了ZooKeeper的工作原理与 ...

  6. libevent源码分析:event_add、event_del

    event_add.event_del两个函数分别是使event生效和失效的,下面就来看一下两个函数的实现. event_add int event_add(struct event *ev, con ...

  7. Python3之pymysql导入mysql

    $cat insert.py #!/usr/bin/python # -*- coding: UTF-8 -*- import os import sys import datetime import ...

  8. 前端js上传文件插件

    1. plupload文件上传 2.ajaxfileupload文件上传

  9. js中取小数整数部分函数;取小数部分

    1.丢弃小数部分,保留整数部分 parseInt(23.56); 结果:23 2.向上取整,有小数就整数部分加1 Math.ceil(23.56) 结果:24 3,四舍五入. Math.round(2 ...

  10. JavaScript高级 面向对象(12)--引用类型值类型作为参数传递的特性

    说明(2017-4-2 18:27:11): 1. 作为函数的参数,就是将函数的数据拷贝一份,传递给函数的定义中的参数. 函数foo()在调用的时候,做了两件事: (1)函数在调用的时候,首先需要将参 ...