Google ProtocolBuffer(PB) 简介和实例2-Wire的使用

时间:2022-07-23 03:59:52

Wire简介

  • 轻量级的protocol buffers,针对移动设备的java库
  • (和protoc产生的代码相比较)由Wire生成的代码方法数量将大大减少,这将有助于android应用避免方法数65k的限制

使用方法

  1. 下载最近的wire jar包,目前最新的版本是wire-compiler-1.7.0-jar-with-dependencies.jar, github上有下载链接
  2. 编写 .proto 文件,这里直接采用上一篇介绍pb时用到的例子
  3. 编译 .proto 文件,用wrie生成java类, 命令如下:java -jar wire-compiler-1.7.0-jar-with-dependencies.jar --proto_path=. --java_out=. addressbook.proto
  4. 序列化和反序列化

    // 构建对象
    PhoneNumber pb = new PhoneNumber.Builder().number("123---adf")
    .type(PhoneType.HOME).build();
    PhoneNumber pb2 = new PhoneNumber.Builder().number("123---adf")
    .type(PhoneType.MOBILE).build();

    List<PhoneNumber> phones = new ArrayList<PhoneNumber>();
    phones.add(pb);
    phones.add(pb2);

    Person john = new Person.Builder().id(1234).name("John Doe")
    .email("jdoe@example.com").phone(phones).build();

    System.out.println(john.toString());

    // 序列化
    byte[] johnbyte = john.toByteArray();

    // 反序列化
    Wire wire = new Wire();
    try {
    Person john2 = wire.parseFrom(johnbyte, Person.class);
    System.out.println(john2.toString());
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

方法数量对比

  • wire产生的代码和protoc产生的代码方法数比是: 82: 508
dd@ubuntu:~/Desktop$ ./jarmethod.sh '/home/dd/Desktop/shard_with_win7/pb-wire.jar' 
82
dd@ubuntu:~/Desktop$ ./jarmethod.sh '/home/dd/Desktop/shard_with_win7/pb-c.jar'
508

参考链接