データを保存するUnityパッケージを作ってみた。
オプションで暗号化と圧縮ができる。
使い方
// set
DataSerializer.SetData ("key", 999);
// get
int data = DataSerializer.GetData<int> ("key");
// ファイルに保存
DataSerializer.Apply ();
という感じで使う。
Apply
を呼ぶまではファイルに書き出されないので、適当なタイミングでApply
する。
Serializableのデータなら保存できるので、
[Serializable]
private class Data {
public int IntVal;
public string StrVal;
public Data(int i, string s) {
IntVal = i;
StrVal = s;
}
}
という感じのクラスを作って、
// set
DataSerializer.SetData ("data", new Data(100, "test"));
// get
Data data = DataSerializer.GetData<Data> ("data");
というのもOK。
ListやDictionaryもそのまま保存できる。
暗号化
DataSerializer.EnableEncryption("keyxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "ivxxxxxxxxxxxxxx");
予め上記のメソッドで暗号化を有効化した後にSetData
を呼べば、AES-CBCで暗号化されて保存される。
圧縮
DataSerializer.EnableCompression ();
暗号化と同様、上記のメソッドで圧縮を有効化してからSetData
すれば、gzipで圧縮される。
なお、Windows環境には圧縮は未対応。
ちなに圧縮処理は結構遅いので、特に理由が無ければ使わない方が良いかも。。。
その他のメソッド
// SetDataは第3引数をtrueにすると、このデータは即ファイルに書き込む
DataSerializer.SetData ("key", 999, true);
// GetDataは第2引数にデフォルト値を指定可能
int data = DataSerializer.GetData<int> ("key", 10);
// データ削除。第2引数はSetData同様、即ファイル書き込みするか(オプション)
DataSerializer.RemoveData("key", true);
// ファイルから事前ロード
DataSerializer.PreLoad("key1", "key2" /*, key3... */);
やってること
BinaryFormatterでシリアライズして、キー毎にファイルを作って保存する。
保存先は Application.persistentDataPath
配下。
ファイルアクセスを減らすため、キャッシュを経由して読み書きする。
そのため一度読んだデータは次からはキャッシュから読み、
書き込みもApply
するまではキャッシュに書き込むだけ。
以上。