第八课 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传输的字节就会少减少带宽消耗。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子成绩提不上去怎么办 孩子数学不开窍怎么办 二年级 初中孩子语文不开窍怎么办 分到的班级都是差生怎么办 初三了英语差怎么办呀 初三了英语差的很怎么办 五年级英语太差怎么办 听课效率没有自学效率高怎么办 小学生不好好写作业怎么办 带的家教成绩没有提高怎么办 学生出国学校成绩证明怎么办 学生成绩考差了班主任怎么办 高一的学生成绩跟不上怎么办 综合素质评价手册丢了怎么办 小学综合素质评价手册丢了怎么办 人体质不出汗差怎么办 儿子一年级语文成绩太差怎么办 小孩读一年级差几个月怎么办 小孩一年级下学期数学差怎么办 小学五年成绩差怎么办 生完孩子记忆力不好怎么办 生了孩子之后记忆力不好怎么办 孩子记忆力差学习不好怎么办 党课结业证丢了怎么办 对三年级不听话的学生应该怎么办 素质报告单丢了怎么办 社保小红本丢了怎么办 小红本丢了怎么办 孩子小红本丢了怎么办 小学素质报告册丢了怎么办 小学生素质报告册丢了怎么办 高中素质报告册丢了怎么办 小升初素质报告单丢了怎么办? 三供一业移交后社区管理职能怎么办 初中政治总考不好怎么办 孩子上初一学习越来越差怎么办 胸经过整容后变得胸闷怎么办? 网瘾高中不学习怎么办 犯罪人逃到美国怎么办 10岁儿童偏胖怎么办 土地面积与实际面积不符怎么办