PB是一个序列化的框架,相比其他框架来说,他更轻巧、简便,利用PB自身的语法可以快速的建立我们自己的数据结构,并且将其序列化,关于PB的语法可以参考:
http://shitouer.cn/2013/04/protocol-buffers-language-guide/
下面我们介绍他的基本使用
1、安装PB
简单起见,写了个小示例,具体语法可以参考上面链接
3、生成类文件
新建一个java项目,并将protobuf-java-2.5.0.jar添加到类路径中,并把Car.java拷贝到项目中
这里我们把序列化的文件写到d:/car.txt。
测试代码如下CarWrite.java
准备在文件中读取
car name:BMW
car name:black
car name:false
car id1
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
简单起见,写了个小示例,具体语法可以参考上面链接
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