Wire简介
- 轻量级的protocol buffers,针对移动设备的java库
- (和protoc产生的代码相比较)由Wire生成的代码方法数量将大大减少,这将有助于android应用避免方法数65k的限制
使用方法
- 下载最近的wire jar包,目前最新的版本是wire-compiler-1.7.0-jar-with-dependencies.jar, github上有下载链接
- 编写 .proto 文件,这里直接采用上一篇介绍pb时用到的例子
- 编译 .proto 文件,用wrie生成java类, 命令如下:
java -jar wire-compiler-1.7.0-jar-with-dependencies.jar --proto_path=. --java_out=. addressbook.proto
-
序列化和反序列化
// 构建对象
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