ObjectInputStreamで複数のオブジェクトをシリアライズ
って、できるんですね。Listとかのコレクションに突っ込んで一気にシリアライズしないといけない!とか勝手に思い込んでいました。
import java.io._ // シリアライズ対象 class Kitten( name:String, age:int ) extends Serializable { override def toString() = name + " : " + age.toString() } // シリアライズを使うサンプル。 object SerializeSample { def main(args: Array[String]) { // 書き込み var b = new ByteArrayOutputStream() var out:ObjectOutputStream = null try { out = new ObjectOutputStream(b) out.writeObject( new Kitten("mii", 1) ) out.writeObject( new Kitten("tora", 2) ) out.writeObject( new Kitten("shiro", 0) ) out.writeObject( new Kitten("kuro", 0) ) } finally { if ( out != null ) { out.close() } } // 読み込み var in:ObjectInputStream = null try { in = new ObjectInputStream( new ByteArrayInputStream( b.toByteArray() )) println( in.readObject() ) println( in.readObject() ) println( in.readObject() ) println( in.readObject() ) } finally { if ( in != null ) { in.close() } } } }
せっかくなのでScalaで。実行結果です。
mii : 1 tora : 2 shiro : 0 kuro : 0
「互換性がなくなるからとりあえず使うな」と教わったシリアライズですが、一時ファイルとかデータ移行が明らかに不要なら使ってもいいよなーと思う今日この頃。