protocol buff是一种协议,是谷歌推出的一种序列化协议 .Java序列化协议也是一种协议

两者的目的是,将对象序列化成字节数组,或者说是二进制数据

导包

        <dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.5.1</version>
</dependency>

创建 demo.proto 文件

option java_package = "com.proto";
option java_outer_classname = "PlayerModule"; message PBPlayer{
required int64 playerId = 1; required int32 age = 2; required string name = 3; repeated int32 skills = 4;
} message PBResource{
required int64 gold = 1; required int32 energy = 2;
}

由工具protoc.exe 使用 bat命令  生成 Java文件

protoc ./proto/*.proto --java_out=./src

pause

对象序列化

//获取一个构造器
Builder builder = PlayerModule.PBPlayer.newBuilder();
//设置数据
builder.setPlayerId(101).setAge(20).addSkills(1011);
//构造出对象
PBPlayer player = builder.build();
//序列化成字节数组
return player.toByteArray();

toByteArray   ->  writeTo(生成的类自己实现的)

反序列化

PBPlayer pbPlayer = PlayerModule.PBPlayer.parseFrom(byte);

自定义序列化

将一个int数据序列化

4个字节   字节序,简单来说,就是指的超过一个字节的数据类型在内存中存储的顺序

可采用两种方式序列化啊

大端字节序:

高位字节数据存放在低地址处,低位数据存放在高地址处;

小段字节序:

高位字节数据存放在高地址处,低位数据存放在低地址处;

TCP/IP协议传输数据时,字节序默认大端

    public static byte[] int2bytes(int i) {
byte[] bytes = new byte[4];
bytes[0] = (byte)(i >> 3*8); //
bytes[1] = (byte)(i >> 2*8); //
bytes[2] = (byte)(i >> 1*8); //
bytes[3] = (byte)(i >> 0*8); //00i
return bytes;
} public static int byte2int(byte[] bytes) {
return (bytes[0] << 3*8) |
(bytes[0] << 2*8) |
(bytes[0] << 1*8) |
(bytes[0] << 0*8); }

也可以使用NIO的ByteBuffer

ByteBuffer buffer = ByteBuffer.allocate(8);

buffer.putInt(id);
buffer.putInt(age); ByteBuffer buffer2 = ByteBuffer.wrap(buffer.array());
buffer2.getInt()

protobuf 序列化 使用的更多相关文章

  1. 透过byte数组简单分析Java序列化、Kryo、ProtoBuf序列化

    序列化在高性能网络编程.分布式系统开发中是举足轻重的之前有用过Java序列化.ProtocolBuffer等,在这篇文章这里中简单分析序列化后的byte数组观察各种序列化的差异与性能,这里主要分析Ja ...

  2. python protobuf序列化repeated运用

    下面是proto描述文件的定义 message Person { required string name = 1; required int32 id = 2; optional string em ...

  3. google protobuf序列化原理解析 (PHP示例)

    一.简介 Protocol Buffers是谷歌定义的一种跨语言.跨平台.可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据量小, ...

  4. 常见的序列化框架及Protobuf序列化原理

    原文链接:https://www.jianshu.com/p/657fbf347934 https://www.cnblogs.com/javazhiyin/p/11375553.html https ...

  5. protobuf序列化、反序列化

    引用dllprotobuf-net.rar /// <summary> /// buf序列化 /// </summary> public static String Seria ...

  6. Java数据通讯中使用Googgle Protobuf 序列化与反序列化

    概念 1.什么是protocol buffer ProtocolBuffer是用于结构化数据串行化的灵活.高效.自动的方法,有如XML,不过它更小.更快.也更简单.你可以定义自己的数据结构,然后使用代 ...

  7. ProtoBuf序列化和反序列化方法

    最近公司需要将以前的协议全都改成ProtoBuf生成的协议,再将结构体打包和解包过程终于到一些问题 ,无法使用Marshal.SizeOf计算结构体大小,最后找了一下ProtoBuf的文档,可以用它自 ...

  8. Google protobuf序列化以及反序列化

    序列化的目的是将对象持久化到硬盘或者用于网络传输.java也提供了序列化技术,非常简单,只要实现Serializable接口即可.如下: public class commonService impl ...

  9. c++ protobuf序列化

    只看了int类型的序列化,后面的有时间再研究 #include <vector> #include <iostream> int main() { ; while (true) ...

随机推荐

  1. codeforces164A

    Variable, or There and Back Again CodeForces - 164A Life is not easy for the perfectly common variab ...

  2. RESOURCE SUMMARY

    I dont know where to start so searched the net and get a lot of free videos, my plan is to watch the ...

  3. Tkinter 之主窗口参数

    一.常用参数 语法 作用 window= tk.TK() 创建窗口 window['height'] = 300 设置高 window['width'] = 500 设置宽 window.title( ...

  4. mysql 导入导出表结构和表数据

    mysqldump -u用户名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据mysqldump -h localhost -uroot -p123456 databas ...

  5. 区间最值问题(RMQ)

    题目描述 给出N个数,求第a个数到第b个数之间最大的数减去最小的数的结果 程序输入说明 N(N小于100,000),M(M小于100,000)接下来有N个数接下来M组范围,所有数均在[0,231-1] ...

  6. object_id()函数

    SQLServer数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id('name','type')方法,做笔记如下: ? 语法:object_id('obje ...

  7. python -- 安装 django

    django-admin startproject 创建的文件名python3/python manage.py startapp 子项目名称python3/python manage.py runs ...

  8. (四)OpenCV-Python学习—形态学处理

    通过阈值化分割可以得到二值图,但往往会出现图像中物体形态不完整,变的残缺,可以通过形态学处理,使其变得丰满,或者去除掉多余的像素.常用的形态学处理算法包括:腐蚀,膨胀,开运算,闭运算,形态学梯度,顶帽 ...

  9. dom 加载监听事件 及解析

    document.addEventListener("DOMContentLoaded", function (_event) { console.log("初始DOM ...

  10. ios 新建app iphone 、 ipad or universal ?

    很久没有关注这个新建app的  时候 选什么的问题了, 因为我们一般在公司 都是 已经建立好的app 直接 在那上面开发. 所以很久不建立新app 遇到新的app需要你自己去创建的时候 可能就会 有突 ...