最近阅读TensorFlow,protocol buffer存储占用空间小,解析效率比json/xml效率高,逐渐被各大主流IT公司使用,基于此,写了一下股票模型的protocol buffer实现
1.下载以来的各种包
- 下载maven包,地址为:http://maven.apache.org/download.cgi,本人下载的是apache-maven-3.5.2-bin.zip
- 下载protobuf-java版,地址为:https://github.com/google/protobuf/releases,本人下载的是protobuf-java-3.5.1.zip
- 下载protobuf操作系统版本,地址为:https://github.com/google/protobuf/releases,本人下载的是protoc-3.5.1-win32.zip,此版本支持64位windows环
2.配置环境变量,安装mvn,编译获取protobuf-java-3.5.1.jar
- 下载完后我放置的目录如下:
- 配置的环境变量如下:
- 将D:\protocolbuffer\protoc-3.5.1-win32\bin\protoc.exe拷贝到D:\protocolbuffer\protobuf-3.5.1\src下,用于编译生成protobuf-java-3.5.1.jar和protobuf-java-util-3.5.1.jar使用
- 分别执行下面的命令,获取到protobuf-java-3.5.1.jar和protobuf-java-util-3.5.1.jar位于D:\protocolbuffer\protobuf-3.5.1\java\core\target和D:\protocolbuffer\protobuf-3.5.1\java\util\target目录下,可以直接使用我编译好的这两个jar
mvn test
mvn install
mvn package
3.编写. .proto文件,message支持日常使用的嵌套定义,引用定义,详细语法规则大家可自行搜索,参考http://blog.youkuaiyun.com/briblue/article/details/53187780
- 执行如下命令,cmd切换到我的工程目录下
cd D:\Workbench\sinodata\project\workspace\eclipse\myApp\src\com\yyy\dailycode\enjoycoding\protocolbuffer\resources
d:
- 执行如下命令。默认生成类到我定义的option java_package = "com.yyy.dailycode.enjoycoding.protocolbuffer.vo"中,因为vo层到src有6层数目和java_package一致,所以下面有6个../
protoc.exe -I=. --java_out=../../../../../../ FinancialData.proto StockItem.proto
- 执行过程如下图:
- 最终文件定义如下:
4.测试类ProtocolBufferTest如下:
package com.yyy.dailycode.enjoycoding.protocolbuffer.demo;
import com.google.protobuf.InvalidProtocolBufferException;
import com.yyy.dailycode.enjoycoding.protocolbuffer.vo.FinancialDataModel;
import com.yyy.dailycode.enjoycoding.protocolbuffer.vo.StockItemModel;
/**
* @类名: ProtocolBufferTest
* @描述:
* @作者: 杨文胜
* @生成时间: 2018-1-11 上午11:33:17
* @修改人:
* @修改时间:
**/
public class ProtocolBufferTest {
/**
* @生成时间: 2018-1-11 下午06:54:39
* @方法说明: 测试main方法
* @参数:
* @返回值:
* @异常:
**/
public static void main(String[] args) {
//创建财务数据builder fb,用于放到StockItem si中
FinancialDataModel.FinancialData.Builder fdb = FinancialDataModel.FinancialData.newBuilder()
//设置营业收入
.setRevenue("13.56亿")
//设置营业收入增长率
.setRevenuerose("29.56%")
//设置净利润
.setNetprofit("2.98亿")
//设置净利润增长率
.setNetprofitrose("21.37%");
//创建日k线数据builder sdb,用于放到StockItem si中
StockItemModel.StockItem.StockData.Builder sdb = StockItemModel.StockItem.StockData.newBuilder()
//设置股票编码
.setStockCode("300463")
//设置开盘价
.setOpen("22.12")
//设置收盘价
.setClose("22.22")
//设置股票名称
.setHigh("22.45")
//设置股票财务数据
.setLow("22.12")
//设置市盈率
.setPe("31.18")
//设置股票日K线数据日期
.setDatestr("2018-01-11");
StockItemModel.StockItem si = StockItemModel.StockItem.newBuilder()
//设置股票id
.setStockId("sz300463")
//设置股票编码
.setStockCode("300463")
//设置股票名称
.setStockName("迈克生物")
//设置股票财务数据
.setFinancialData(fdb)
//设置股票日k线数据
.setStockData(sdb)
.build();
//打印股票信息
System.out.println(si.toString());
//反向解析股票信息
try {
byte[] array = si.toByteArray();
StockItemModel.StockItem si2 = StockItemModel.StockItem.parseFrom(array);
System.out.println(si2.toString());
//在这里打印股票名称
System.out.println(si2.getStockName().toString());
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
至此protocol buffer java版本使用完毕,测试了一下,确实很快
源码git地址为:https://github.com/ywswen/myApp/tree/master/src/com/yyy/dailycode/enjoycoding/protocolbuffer
上述使用使用到的文件和类已上传到,如有问题可以加qq654382144相互讨论学习