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. grafana+mysql忘记admin密码解决方法

    通过mysql修改admin的密码. 我之前注册了一个用户,所以我直接复制lvusyy这个用户的密码即可. update user inner join (select password,salt,r ...

  2. (转)服务端监控工具:nmon的使用

    在性能测试过程中,对服务端的各项资源使用情况进行监控是很重要的一环.这篇博客,介绍下服务端监控工具:nmon的使用方法.. 一.认识nmon 1.简介 nmon是一种在AIX与各种Linux操作系统上 ...

  3. dp之斜率优化

    前几天想练练思维,所以从cf上随便找了一道dp题,看完题意后第一感觉很简单,就是简单的区间dp题,但是看到数据范围的我顿时就懵了,(1≤n≤105) emmmmmmmm,按照普通的思路肯定会超时的.. ...

  4. Vue实战041:获取当前客户端IP地址详解(内网和外网)

    前言 我们经常会有需求,希望能获取的到当前用户的IP地址,而IP又分为公网ip(也称外网)和私网IP(也称内网IP),IP地址是IP协议提供的一种统一的地址格式,每台设备都设定了一个唯一的IP地址”, ...

  5. ListView / GirdView Adpater的getView方法,首项多次调用

    通过Adapter为AbslistView提供内容是一个常见的做法:在ListView或者GridView的Adapter中的getView()方法中,加入一行日志,看getView()被调用的情况 ...

  6. Linux信号使用及自定义信号

    linux自定义信号:https://www.cnblogs.com/bigben0123/p/3186661.html linux信号.值及解释:https://blog.csdn.net/luot ...

  7. VUE -- 对 Element UI table中数据进行二次处理

    时间——日期 后台经常给我们返回的是 时间戳 (例如:1535620671) 这时候我们页面展现的时候需要将时间戳转换为我们要的格式 例如 (YYYY-MM-DD HH:mm:ss) 如果是在Elem ...

  8. Logback 输出 JPA SQL日志 到文件

    Logback 输出 JPA SQL日志 到文件 使用Spring Boot 配置 JPA 时可以指定如下配置在控制台查看执行的SQL语句 spring.jpa.show-sql=true Sprin ...

  9. SQL-W3School-函数:SQL LAST() 函数

    ylbtech-SQL-W3School-函数:SQL LAST() 函数 1.返回顶部 1. LAST() 函数 LAST() 函数返回指定的字段中最后一个记录的值. 提示:可使用 ORDER BY ...

  10. golang 循环创建闭包 问题排查

    ][]string{ { { "邀请码是什么", "我没有邀请码", "这个邀请码我可以随便填吗", "邀请码可以填他的手机号吗& ...