読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

ObjectInputStreamで複数のオブジェクトをシリアライズ

Java

って、できるんですね。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

「互換性がなくなるからとりあえず使うな」と教わったシリアライズですが、一時ファイルとかデータ移行が明らかに不要なら使ってもいいよなーと思う今日この頃。