好久没写博客了,主要是这一年技术没啥长进都打杂了,还有就是生活琐事越来越多,人也越来越懒了…… 之前项目中用到了Protobuf,然后测试发现这玩意不好测,总不能每次定个协议或者改下都要编译Java代码吧。于是我这边写了简单的工具,动态的解析PB文件。效果如下:

“选择请求协议”和“选择响应协议”就是选择定义的PB,比如下面这个文件:

package perf.pb;
option optimize_for = LITE_RUNTIME; message Entry {
required string key = 1;
optional bytes value = 2;
repeated Entry extinfo = 3;
} message Request {
repeated Entry entry = 1;
} message Response {
repeated Entry entry = 1;
}

另外工具支持一些简单的功能,比如“保存”,“另存为”(将PB文件和数据打包在一起),生成PB二进制的数据等:

我们用的http,但核心代码就是动态解析PB文件和将数据绑定到JTree上,有需要的朋友可以拿源码改下,因为急着实现功能,所以代码很乱。

关于PB文件格式有几点:

1)支持import,工具会自动处理引用;

2)支持repeated

3)支持默认值,包括枚举的默认值

4)必须要指定package

5)不支持message嵌套

还有如果运行有问题,看下你Java环境指向的jdk或jre的lib目录下有没有tools.jar,没有的话从别的目录拷过来就可以了。

GitHub地址:https://github.com/zhanjindong/protobuf-tool

其中动态解析用的是百度的jprotobuf,但是官方的版本不支持类似上面“Entry”嵌套“Entry”的格式,还有不支持repeated,我fork了一个版本:https://github.com/zhanjindong/jprotobuf

开源一个动态解析protobuf的工具的更多相关文章

  1. 开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码

    开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码. 开源地址: https://github.com/jkpang/PPRows

  2. 开源一个CSV解析器(附设计过程 )

    在ExcelReport支持csv的开发过程中,需要一个NETStandard的csv解析器.在nuget上找了几个试用,但都不太适合. 于是,便有了:AxinLib.IO.CSV. 先看看怎么用: ...

  3. unity slua整合帅气的lua-pb解析protobuf

    了解到lua的一个protobuf库,接口帅气,比之前用过的一些lua protobuf库要好很多,深得我心.而且能保持更新,比其他库几年没更新要放心. lua-pb动态解析protobuf协议,无需 ...

  4. Window下 Qt 编译MySQL驱动(居然用到了动态库格式转换工具)

    一步步在Window下开发Qt 今天开始安装MySQL,看了些关于MySQL安装的博文,方法大致相同,但是遇到的细节问题各有不同,或者没有讲全面,下面来说说个人的安装过程及遇到的问题. 1.首先下载, ...

  5. jsoncpp动态解析节点类型

    在互联网无处不在的今天,JSON作为轻量级数据存储格式,被广泛应用到互联网数据传输中.众所周知,JSON由键/值对.对象.数组组成,其中键/值对的值包括以下几种类型: enum ValueType { ...

  6. Protobuf动态解析在Java中的应用 包含例子程序

    最近在做ProtoBuf相关的项目,其中用到了动态解析,网上看了下相关资料和博文都比较少,自己来写一个记录一下学习过程.   Protocol Buffers是结构化数据格式标准,提供序列化和反序列方 ...

  7. Protobuf动态解析那些事儿

    需求背景 在接收到 protobuf 数据之后,如何自动创建具体的 Protobuf Message 对象,再做反序列化.“自动”的意思主要有两个方面:(1)当程序中新增一个 protobuf Mes ...

  8. 开源一个IE下获取XPath小工具,支持32/64位

    背景是曾经友情支持了测试组一小段时间,发现他们使用selenium做页面的自动化测试,需要用到XPath,但IE下没有获取XPath的工具,只能在Firefox和chrome下获取,步骤还比较麻烦.而 ...

  9. java 写一个JSON解析的工具类

    上面是一个标准的json的响应内容截图,第一个红圈”per_page”是一个json对象,我们可以根据”per_page”来找到对应值是3,而第二个红圈“data”是一个JSON数组,而不是对象,不能 ...

随机推荐

  1. POJ 2236 Wireless Network(并查集)

    传送门  Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 24513   Accepted ...

  2. Eclipse自动补全+常用快捷键

    一,Eclipse自动补全增强方法 在Eclipse中,从Window -> preferences -> Java -> Editor -> Content assist - ...

  3. ajax请求下拉列表框的实现(面向对象封装类)

    实现的效果图 <?php class Car{ private $carColor; private $carType; public function __construct($carColo ...

  4. VC----对话框Dialog

    一个非模态对话框,当作主窗体的创建:(符合窗口创建的步骤) 第一步:补充一个模板,在RC脚本文件文件中,这是和普通窗口不一样的地方.这利益于编译器和链接器的支持呀. #include "wi ...

  5. php分页的实现

    php常见分页有3种,一种是文字分页,比如说上一页,下一页之类的,还有一种数字分页,像1,2,3...之类的,这个比较简单,前者稍微复杂些.最后一种是他们2者结合. 下面是代码:    1 //获取当 ...

  6. 解决并发情况下库存减为负数问题--update2016.04.24

    场景: 一个商品有库存,下单时先检查库存,如果>0,把库存-1然后下单,如果<=0,则不能下单,事务包含两条sql语句: ; update products ) WHERE id=; 在并 ...

  7. cookie, localStorage, sessionStorage区别

    cookie 有过期时间,默认是关闭浏览器后失效,4K,兼容ie6,不可跨域,子域名会继承父域名的cookielocalStorage 永不过期,除非手动删除,5M,兼容IE8,不可跨域,子域名不能继 ...

  8. Druid使用起步—在javaWeb项目中配置监控 连接池

    当我们在javaWEB项目中使用到druid来作为我们的连接池的时候,一定不会忘了添加监控功能.下面我们就来看一下,在一个简单的web项目中(尚未使用任何框架)我们是如果来配置我们的web.xml来完 ...

  9. C++ compile issue

    You can do so via right-click -> Properties on a file or a selection of files in Solution Explore ...

  10. hibernate4中取得connection的方法

    在hibernate3中,使用了c3p0连接池,尝试了多种办法取得connection对象,以下两种可以使用. Java代码  Connection conn; // 方法1:hibernate4中将 ...