Protocol Buffers 使用

本文介绍了如何使用PB(Protocol Buffers)序列化框架进行数据结构定义、序列化及反序列化操作,包括安装PB、编写proto文件、生成类文件、测试序列化功能等步骤。通过实例演示了如何快速建立并操作自定义数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值