第八课 protocol buffer实战
来源:互联网 发布:安卓组态软件 编辑:程序博客网 时间:2024/06/08 04:58
1.protocol buff是一种协议,是谷歌推出的一种序列化协议
2.Java序列化协议也是一种协议
3.两者的目的是,将对象序列化成字节数组,或者说是二进制数据
java序列化示例
public class JAVA2Bytes { public static void main(String[] args) throws Exception { byte[] bytes = toBytes(); toPlayer(bytes); } /** * 序列化 * @throws IOException */ public static byte[] toBytes() throws IOException{ //新建一个Player类 Player player = new Player(101, 20, "peter"); player.getSkills().add(1001); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); //写入对象 objectOutputStream.writeObject(player); //获取 字节数组 byte[] byteArray = byteArrayOutputStream.toByteArray(); System.out.println(Arrays.toString(byteArray)); return byteArray; } /** * 反序列化 * @param bs * @throws Exception */ public static void toPlayer(byte[] bs) throws Exception{ ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(bs)); Player player = (Player)inputStream.readObject(); //打印 System.out.println("playerId:" + player.getPlayerId()); System.out.println("age:" + player.getAge()); System.out.println("name:" + player.getName()); System.out.println("skills:" + (Arrays.toString(player.getSkills().toArray()))); }}
protocol buffer序列化实例
1 定义要序列化的对象
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;}
2.使用protoc.exe生成PlayerModule
类
3.使用protocol进行序列化
public class PB2Bytes { public static void main(String[] args) throws Exception { byte[] bytes = toBytes(); toPlayer(bytes); } /** * 序列化 */ public static byte[] toBytes(){ //获取一个PBPlayer的构造器 Builder builder = PlayerModule.PBPlayer.newBuilder(); //设置数据 builder.setPlayerId(101).setAge(20).setName("jay").addSkills(1001); //构造出对象 PBPlayer player = builder.build(); //序列化成字节数组 byte[] byteArray = player.toByteArray(); System.out.println("系列化后生成的数组:"+Arrays.toString(byteArray)); return byteArray; } /** * 反序列化 * @param bs * @throws Exception */ public static void toPlayer(byte[] bs) throws Exception{ PBPlayer player = PlayerModule.PBPlayer.parseFrom(bs); System.out.println("playerId:" + player.getPlayerId()); System.out.println("age:" + player.getAge()); System.out.println("name:" + player.getName()); System.out.println("skills:" + (Arrays.toString(player.getSkillsList().toArray()))); }}
根据打印的序列化后的数组可以看出protocol序列化后的数组长度远远小于java自带的序列化方式,因此protocol传输的字节就会少减少带宽消耗。
阅读全文
0 0
- 第八课 protocol buffer实战
- Protocol Buffer实战
- protocol buffer
- protocol buffer
- Protocol Buffer
- protocol Buffer
- protocol buffer
- Protocol Buffer
- Protocol Buffer
- Protocol Buffer
- Protocol Buffer
- Protocol Buffer
- Protocol Buffer
- Protocol Buffer
- Protocol Buffer
- Protocol Buffer
- Protocol Buffer
- Google Protocol Buffer序列化入门实战(附源码)
- java程序员从笨鸟到菜鸟之(十六)包装类型Inter和Character
- 如何在c语言中源文件调用另一个源文件的函数
- shell快速入门
- xib里 scrollView的 适配
- Openstack不支持LVM作为Cinder后端时的跨节点热迁移
- 第八课 protocol buffer实战
- Core Animation实战五(变换)
- 一个简单明了的c++ trace log 实现
- Windows下安装python版的XGBoost(Anaconda)【成功验证,按着步骤一步一步安装能够成功】
- Oracle数据库表约束
- docker android sdk镜像
- 小甲鱼学python
- AndroidStudio 依赖 ButterKnife 出现的空指针异常,无效操作解决办法
- Go语言之三驾马车