MessagePack for Java を使ってみる


どうも、hide92795です
ノベルエンジンの作成の中で、読み込むデータなどをどのように保存(シリアライズ)しておくかということで、
調べていたら速度・圧縮率ともに優秀らしい MessagePack というライブラリを使用することにしました。
(今まではjava.io.Serializableを実装していましたが、圧縮率という面で不安になったので乗り換えることにしましたw)
The Message Pack
http://msgpack.org/

※この中では2012/01/16時点(MessagePack 0.6.6)について書いています

・インストール方法

MessagePackはjarとして配布がされていないので、gitかMavenリポジトリからソースを取得&コンパイルする必要があります
自分がやったやり方はeclipseとgitとAntでjarを生成する方法です。
①EgitでMessagePackのリポジトリからクローンする
msgpack_1
②リポジトリを右クリックし、「プロジェクトのインポート」
「プロジェクトをインポートするためのウィザード」では「一般的なプロジェクトとしてインポート」を選択
③パッケージエクスプローラーに「msgpack-java」というのが追加される
④プロジェクトの中の「built.xml」を右クリックし、「実行」→「Ant ビルド」を選択
⑤コンソールに「BUILD SUCCESSFUL」と出たら成功
⑥プロジェクトのフォルダの中の「build」フォルダにmsgpack-0.0.1.jarと「build\lib」フォルダに必要なライブラリが生成される
⑦これらをまとめてビルドパスに追加する
これで使う準備ができますw
・使い方
公式の方には、シリアライズしたいクラスに@Messageアノテーションをつければいいと書いてありましたが、byte[][]なんかを自分のクラスでは使っているのでエラーになってしまいました。

↑基本的にはこんな感じで使います。

自分のやつではこれでできないので、自分でPackerを生成し、値を一つずつ埋め込み&読み込みを行います。
・埋め込み

・読み込み

こんな感じですw
手順としては、PackerをcreatePackerで取得して、Packerに対してwrite(データ)で埋め込み、
read***()でプリミティブ型とString型の読み込み
(readInt(), readString(), readShort(), readLong())
read(Class c)でプリミティブ型のラッパークラス・その他Object・byte配列を除くプリミティブ型の配列の読み込み
(read(Integer.class), read(String.class), read(int[].class))
を行います。
埋め込みと読み込みの操作での操作は同じ順番(1番目にint 2番目にString みたいに)
これらを守ればほぼ確実にできると思いますw
ではノシ

    • komikoni
    • 2013年 5月 18日 12:19pm

    記事ありがとうございます
    記事は本当に参考になりました
    文字列の二次元配列は単独だと上手く行くんですが、MAPに入れると、駄目で悩みましたがクラスを作ると行けました

  1. トラックバックはまだありません。

*