[C#]シリアライズしたオブジェクトをバイナリ形式で出力する方法
まずはシリアライズ。方法は、[Serializable]を付けるだけ。
例として、文字列をバイト配列で保持するシリアライズクラスを適当に書いてみた。
using System; using System.Collections.Generic; using System.Text; namespace SandBox { [Serializable] public class SerializedByteArray { private byte[] data; public SerializedByteArray(string str) { this.data = Encoding.Unicode.GetBytes(str); } public string Text { get { return Encoding.Unicode.GetString(data); } } /// <summary> /// 保持しているバイト情報を引数で指定した数だけ倍にする /// </summary> /// <param name="size"></param> public void Increase(int size) { string str = this.Text; StringBuilder temp = new StringBuilder(str); for (int i = 0; i < size; i++) { temp.Append(str); } this.data = Encoding.Unicode.GetBytes(temp.ToString()); } } }
さて、このクラスをバイナリ形式でファイル入出力してみよう。
実はBinaryFormatterを使って簡単に出力できる。
使うのは、Serialize()メソッド。
/// <summary> /// オブジェクト書き込み /// </summary> /// <param name="filePath"></param> /// <param name="obj"></param> public void Write(string filePath, object obj) { using (Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { IFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, obj); } }
読み込みも同様に簡単に書ける。
こちらは、Deserialize()メソッドで取り込み。
/// <summary> /// オブジェクト読み込み /// </summary> /// <param name="filePath"></param> /// <returns></returns> public object Read(string filePath) { object obj; using (Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { IFormatter formatter = new BinaryFormatter(); obj = formatter.Deserialize(stream); } return obj; }
手軽。