您的位置:首页 > Web前端

Protocol Buffers 使用

2014-02-20 14:20 281 查看
  PB是一个序列化的框架,相比其他框架来说,他更轻巧、简便,利用PB自身的语法可以快速的建立我们自己的数据结构,并且将其序列化,关于PB的语法可以参考:
http://shitouer.cn/2013/04/protocol-buffers-language-guide/
下面我们介绍他的基本使用

1、安装PB

  可以到 http://code.google.com/p/protobuf/downloads/list 去下载,目前最新版本为2.5.0,因为是测试环境,我下了protoc-2.5.0-win32.zip,如果在linux下可以下载源码安装,和其他软件类似:configure 、make 、make install就可以了,在windows下的zip包可以直接解压,里面是一个可执行文件protoc.exe

2、编写proto文件
简单起见,写了个小示例,具体语法可以参考上面链接
message car {
required string name = 1;
required string color = 2;
optional bool isold = 3 [default = false ];
required int32 id = 4;
}
其中message为起始标识,后面跟类名,结构体定义在花括号中,required为必备选项,optional为可选项

3、生成类文件
d:> c:\Desktop\protoc.exe --java_out=. car.proto
这条命令会在d盘下生成Car.java

D:\>dir Car.java
驱动器 D 中的卷是 Data
卷的序列号是 0010-7BE4

D:\ 的目录

2014/02/20  13:48            25,704 Car.java
1 个文件         25,704 字节
0 个目录 105,980,571,648 可用字节
4、测试Car.java的序列化功能

  新建一个java项目,并将protobuf-java-2.5.0.jar添加到类路径中,并把Car.java拷贝到项目中

  这里我们把序列化的文件写到d:/car.txt。

  测试代码如下CarWrite.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CarWrite {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
System.out.println("准备写入文件");
Car.car car = Car.car.newBuilder()
.setName("BMW")
.setColor("black")
.setIsold(false)
.setId(1).build();

FileOutputStream fos = new FileOutputStream("d:/car.txt");
car.writeTo(fos);
fos.close();

System.out.println("准备在文件中读取");
FileInputStream fis = new FileInputStream("d:/car.txt");
Car.car car2 = Car.car.parseFrom(fis);
System.out.println("car name:"+car2.getName());
System.out.println("car name:"+car2.getColor());
System.out.println("car name:"+car2.getIsold());
System.out.println("car id"+car2.getId());
}

}


运行结果如下:

准备写入文件

准备在文件中读取

car name:BMW

car name:black

car name:false

car id1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: