開発を手伝うのだから、まずは使い方を知らなければ!と思い早速使ってみることにした。MessagePackのページはhttp://msgpack.org/。まずはチュートリアル?の真似事。現時点での必要なjarをアップロードしておいた。MessagePackのページからダウンロードできるけど、たどるのがめんどうな人向けにmsgpack-0.3.jar
import org.msgpack.Packer; import org.msgpack.Unpacker; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; public class Test{ public static void main(String[] args) throws Exception{ //まずシリアライズ // 出力先のOutputStream ByteArrayOutputStream out = new ByteArrayOutputStream(); // シリアライザを初期化 Packer pk = new Packer(out); // シリアライズ pk.pack("テスト"); out.close(); byte[] buff = out.toByteArray(); //ここからデシリアライズ // 入力元のInputStream ByteArrayInputStream in = new ByteArrayInputStream(buff); // デシリアライザを初期化(ストリームシリアライザ) Unpacker pac = new Unpacker(in); //拡張for文で取り出す for(Object obj : pac){ System.out.println(obj.toString()); } } }
出力結果
[B@1a758cb…うむ、型の変換がうまくいっていないらしい…で、スキーマの出番かと思ったらスキーマが対応しているのは自分で定義したクラスとList、Set、Mapのみらしい。文字列だけの場合はどうすればいいんだろう?これでは終われないので別の型を試してみることにした。文字列やめて整数だ。
import org.msgpack.Packer; import org.msgpack.Unpacker; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; public class Test{ public static void main(String[] args) throws Exception{ //まずシリアライズ // 出力先のOutputStream ByteArrayOutputStream out = new ByteArrayOutputStream(); // シリアライザを初期化 Packer pk = new Packer(out); // シリアライズ pk.pack(1); pk.pack(100); pk.pack(10000); out.close(); byte[] buff = out.toByteArray(); //ここからデシリアライズ // 入力元のInputStream ByteArrayInputStream in = new ByteArrayInputStream(buff); // デシリアライザを初期化(ストリームシリアライザ) Unpacker pac = new Unpacker(in); //拡張for文で取り出す for(Object obj : pac){ System.out.println(obj); } } }
出力
1
100
10000
整数はうまくいった。課題は文字列か