C1ZStreamReader クラスと C1ZStreamWriter クラスを使用することで、zip ファイル内だけでなく、任意の .NET ストリームでデータ圧縮を使用することができます。
C1ZStreamReader オブジェクトと C1ZStreamWriter オブジェクトを使用するには、それらを通常のストリームにアタッチし、そのストリームを通してデータを読み書きします。データは、基底のストリームで直ちに圧縮(または展開)されます。
この設計により、ネイティブ .NET ストリームとの統合性が高まります。次の図に、この設計がどのように機能するかを示します。
たとえば、次のコードは、ストリームに DataGrid を保存して読み戻します:
C# |
コードのコピー
|
---|---|
PersonList personList = new PersonList(); public MainPage() { InitializeComponent(); } // DataGrid を作成します。 private void btnCreate_Click(object sender, RoutedEventArgs e) { for (int i = 0; i < 1000; i++) { personList.Persons.Add(new Person() { FirstName = string.Format("First Name {0}", i), LastName = string.Format("Last Name {0}", i), Age = i, City = string.Format("City {0}", i) }); } this.dataGrid1.ItemsSource = personList.Persons; } // ストリームにデータを保存します。 private void btnSave_Click(object sender, RoutedEventArgs e) { SaveFileDialog dlgSaveFile = new SaveFileDialog(); if (dlgSaveFile.ShowDialog() == true) { Stream stream = dlgSaveFile.OpenFile(); DataContractSerializer dcs = new DataContractSerializer(typeof(PersonList)); dcs.WriteObject(stream, personList); stream.Close(); } } // データを圧縮します。 private void btnSaveCompressed_Click(object sender, RoutedEventArgs e) { var dlgSaveFile = new SaveFileDialog(); if (dlgSaveFile.ShowDialog() == true) { Stream stream = dlgSaveFile.OpenFile(); //C1ZStreamWriter を使用してストリームを圧縮します。 C1ZStreamWriter compressor = new C1ZStreamWriter(stream); DataContractSerializer dcs = new DataContractSerializer(typeof(PersonList)); dcs.WriteObject(compressor, personList); stream.Close(); } } // ストリームからデータを読み込みます private void btnLoad_Click(object sender, RoutedEventArgs e) { var dlgOpenFile = new OpenFileDialog(); this.dataGrid1.ItemsSource = null; if (dlgOpenFile.ShowDialog() == true) { Stream stream = dlgOpenFile.File.OpenRead(); DataContractSerializer dcs = new DataContractSerializer(typeof(PersonList)); PersonList pl = (PersonList)dcs.ReadObject(stream); stream.Close(); this.dataGrid1.ItemsSource = pl.Persons; } } // 圧縮されたデータを読み込みます。 private void btnLoadCompressed_Click(object sender, RoutedEventArgs e) { var dlgOpenFile = new OpenFileDialog(); this.dataGrid1.ItemsSource = null; if (dlgOpenFile.ShowDialog() == true) { Stream stream = dlgOpenFile.File.OpenRead(); DataContractSerializer dcs = new DataContractSerializer(typeof(PersonList)); //C1ZStreamReader を使用してストリームを解凍します。 C1ZStreamReader compressor = new C1ZStreamReader(stream); PersonList pl = (PersonList)dcs.ReadObject(compressor); stream.Close(); this.dataGrid1.ItemsSource = pl.Persons; } } |