2015年12月17日木曜日

UnityではSystem.IO.Compression.GZipStreamが使えない

UnityではSystem.IO.Compression.GZipStreamが使えない!!
シリアル化したセーブデータを圧縮・伸長したいのに!!

と思ったらきちんと代替手段が用意されていたで御座候。
それどころかbzip2まで用意されてござる(遅いから今回は使わないけど)。

しかも、(おそらく)セーブデータなどでの圧縮・伸長用に考慮されているとみえ、streamとして扱える丁寧なつくりです。

私事ながら現在手掛けているC:SL用MODはシリアル化するとかなり大きくなるデータを扱うMODなのでSystem.IO.Compression名前空間のお友達に会えないとわかった時にはどうしようかと思いましたが、このおかげでセーブデータ長制限に引っかかる率も格段に下がってありがたい限りです。

使い方は超簡単。例えばリストア先クラスfooがあったとして、速度重視でgzipで伸長してシリアルデータからオブジェクトに戻す場合は、
BinaryFormatter bf = new BinaryFormatter();
using ( MemoryStream ms = new MemoryStream( savedata ) ){
  using ( GZipInputStream gs = new GZipInputStream( ms ) ){
    foo = bf.Deserialize( gs ) );
  }
}
MemoryStreamをコンストラクタへの引数にするだけ。
間に一枚かぶせるだけで済みます。圧縮(GZipOutputStream)の場合もまた然り。

・・・確かに標準のライブラリより多機能かもしれないけど・・・メンドクセ

0 件のコメント:

コメントを投稿