マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

MessagePack for Javaを使ってみる

開発を手伝うのだから、まずは使い方を知らなければ!と思い早速使ってみることにした。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

整数はうまくいった。課題は文字列か