/protostuff

Java serialization library, proto compiler, code generator

Primary LanguageJavaApache License 2.0Apache-2.0

Protostuff

###遇到或解决的问题

1,需要告诉的序列化,且对大对象很友好

经过多次比对发现protostuff性能稳定,且对大对象很友好,速度相对稳定。
中间也考虑过用json,或者json2,但是作为一家老牌互联网公司历史上会有一些,不是很规范的写法,导致json无法使用,
比如泛型不明确:List<Object> ,List<Map>
最终选择了protostuff

2,兼容性

选择protostuff后面临兼容性的问题
a,不加tag的话,可能会有开发的同学将新增的属性发到类的上面,或者中间
b,加tag,也会面临其他的问题
比如我们敦煌作为大型互联网公司,且已经微服务化。会有很多个工程,同时依赖关系也相对复杂。
A工程的开发同学对dto字段加了属性但是忘记加tag。然后进行构建。
B工程现在正好构建,发版。但是B工程只改了一小点内容,甚至是一条日志打印,不可能要求他把所有的功能测试,或者单元测试都跑一遍。
但是由于A的(非法)修改导致B工程上线报错。

3,减少工作量

加tag作为一个机械性动作,带来的使用感觉不是很好

4,解决思路

在原有的protostuff基础上做了小的调整,有tag取tag值,没有tag计算一个值

5,junit测试类

NoAnnotatedFieldsTest

6,写到最后

我们公司内部使用的版本,有2个模式一个是上面介绍的。
另外一个模式是兼容以前老的版本,因为无法做到全公司同一时间升级jar包。
如果大家需要,我可以在当前基础上继续修改,将这个功能也囊括进来