数ヶ月前から
というのを細々と作ってました。
これは何かというと、
msgpack/msgpack-java at v07-develop · GitHub で開発が進められているMessagePack Javaのv0.7系の実装と
FasterXML/jackson-databind · GitHub の豊富なデータバインディング機能を連携させるライブラリです。
作った背景ですが、
- 性能面およびメンテナンス性において大きく改善すべく開発が進められているmsgpack-java v07では、v06まで提供していたある程度のデータバインディング機能を自前で提供する予定が今のところ無いので何かしら必要
- そもそものmsgpack-java v06までのデータバインディング機能の機能的な制限が結構辛い
といった感じです。
現状でもv06で扱えない色々なケースに対応しているっぽいので便利っぽい(ぽいぽい)。
- Nested maps and arrays supported? · Issue #131 · msgpack/msgpack-java · GitHub
- Working with enums · Issue #135 · msgpack/msgpack-java · GitHub
- Cross-platform Objects · Issue #136 · msgpack/msgpack-java · GitHub
本家jackson-databind (JSON format)と比較すると(
https://github.com/komamitsu/jackson-dataformat-msgpack/tree/master/src/test/java/org/msgpack/jackson/dataformat/msgpack/benchmark
)性能的には下記のような感じで 1.1 ~ 1.5 倍くらい遅いです。とりあえず手なりで書いて、msgpack-java v07自体で改善した方が良さそうなところを直してもらって、位しかまだやってないので、そろそろjackson-dataformat-msgpack自体の性能を改善する時期なのかもしれないです。
normal object mapper: deserialize(huge_data) => 354 msgpack object mapper: deserialize(huge_data) => 371 normal object mapper: serialize(huge_data) => 130 msgpack object mapper: serialize(huge_data) => 137 normal object mapper: serialize(pojo) => 1288 msgpack object mapper: serialize(pojo) => 1594 normal object mapper: deserialize(pojo) => 2075 msgpack object mapper: deserialize(pojo) => 2998
あと、msgpack-java v07は現状Android (Dalvik VM) では動かないので、結果的に jackson-dataformat-msgpack でも動かない状態なので、後で msgpack-java v07 自体のほうも対応しないとなぁとか思ってます。
とりあえず、割と使い勝手が良い感じがするので使って頂いて、フィードバック等あればissueに突っ込んで頂けると嬉しいです。