このチュートリアルでは、オブジェクトを圧縮ファイルにシリアライズする方法、およびそのオブジェクトをメモリにロードする方法について説明します。
このサンプルは、人物リストのデータテーブルを作成します。テーブルは、通常のストリームと圧縮ストリームに保存(シリアライズ)されます。最後に、どちらかのストリームからデータがロードされます。最終アプリケーションは、次の図のように表示されます。
Visual Studio のツールボックスから、新しい WPF/Silverlight プロジェクトを開始し、フォームに次のコントロールを追加します。
フォームの左端に並べて5個の Button コントロール(前の図を参照)。[プロパティ]ウィンドウで、各 Button コントロールに次の変更を加えます。
フォームの左端に並べて4個の Button コントロール(前の図を参照)。[プロパティ]ウィンドウで、各 Button コントロールに次の変更を加えます。
Button | Button.Text プロパティ | Button.Name プロパティ | Button.Enabled プロパティ |
---|---|---|---|
1 | DataTable の作成 | btnCreate | True(デフォルト) |
2 | DataTable の保存 | btnSave | False |
3 | DataTable の読み込み | btnLoad | False |
4 | 圧縮された DataTable の読み込み | btnLoadCompressed | False |
フォームの右に DataGridView コントロール。
フォームの下部にドッキングされる ToolStripStatusLabel コントロール。このコントロールを追加するには、最初に StatusStrip コントロールをフォームに追加します。次に、[ToolStripStatusLabel の追加]ドロップダウン矢印をクリックし、[StatusLabel]を選択します。ToolStripStatusLabel コントロールが表示され、フォームの下部にドッキングされます。
ソリューションエクスプローラウィンドウに移動し、[すべてのファイルを表示]ボタンをクリックします。[参照]を右クリックし、[参照の追加]メニューオプションを選択します。リストから C1.WPF.Zip/C1.Silverlight.Zip アセンブリを選択するか、ファイルを参照して C1.WPF.Zip.4.dll/C1.Silverlight.Zip.dll ファイルを探します。
[Form1.vb]タブ(C# では[Form1.cs]タブ)を選択するか、[表示]→[コード]を選択して、コードエディタを開きます。ファイルの上部に、次のステートメントを追加します。
これで、プロジェクト内で使用されるクラスの名前空間が宣言されます。
フォームのコードエディタで、フォーム実装の本体に、次の行を入力するかコピーします。
これらの定数は、データテーブルへの入力時に使用されるデータベースの名前、およびデータのシリアライズに使用されるファイルの名前を定義します。
[DataTable の作成]ボタンの Click イベントを処理する次のコードを追加します。
この関数は、標準の ADO.NET オブジェクトとメソッドを使用して、DataTable オブジェクトを作成し、このオブジェクトにデータを入力します。このオブジェクトは、次に DataGrid コントロールに連結されます。
[データテーブルの保存]ボタンの Click イベントを処理する次のコードを追加します。
最初のコードセットは、DataTable を通常のファイルにシリアライズします。2番目のコードセットは、DataTable を圧縮ファイルにシリアライズします。1行のコードを追加するだけで、データを圧縮することができます。
どちらの場合も、シリアライズは BinaryFormatter オブジェクトによって実行されます。唯一の違いは、最初のコードセットでは Serialize メソッドが通常のファイルストリームをパラメータとして呼び出され、2番目のコードセットでは代わりに C1ZStreamWriter が使用されるという点です。
[DataTable の読み込み]ボタンの Click イベントを処理する次のコードを追加します。
最初に重要な行は新しい BinaryFormatter オブジェクトの作成、次に重要な行はその Deserialize メソッドの呼び出しです。この Deserialize メソッドはパラメータを1つ受け取ります。それは、オブジェクトが定義されたストリームです。この場合、ストリームは通常のファイルストリームです。
[圧縮された DataTable の読み込み]ボタンの Click イベントを処理する次のコードを追加します。
重要な行は、通常のファイルからデータをシリアライズ解除するコードと同じです。唯一の違いは、Deserialize メソッドに通常のファイルストリームを渡す代わりに、C1ZStreamReader オブジェクトを使用すると点です。
これで、「圧縮シリアライズ」チュートリアルは終了です。