C#にてデータ圧縮を行う

C#にてデータ圧縮を行うには、System.IO.Compression名前空間
DeflateStreamクラスを使う。
CompressionModeをCompress(解凍する場合はDecompress)に設定し
インスタンスを作成。
書き出し先はメモリでもファイルでもStreamクラスを継承してればOK。
CompressedStream.Write()にてバイト配列を書き出すと
勝手に指定したStreamに圧縮したバイト配列を書き込んでくれる。


【byte配列を受け取って、圧縮したbyte配列を返す関数】

public static byte convertByteCompress(byte inbyte) {
var ms = new System.IO.MemoryStream();
var CompressedStream = new System.IO.Compression.DeflateStream(ms,
System.IO.Compression.CompressionMode.Compress, true);
CompressedStream.Write(inbyte, 0, inbyte.Length);
CompressedStream.Close();
byte[] destination = ms.ToArray();
// System.Diagnostics.Debug.WriteLine(string.Format("XML Data 元バイト数={0} 圧縮後={1}", inbyte.Length, destination.Length));
ms.Close();
return destination;
}


なんでこれが必要になったか。
実はCV POSでローカルのXMLファイルをバックアップとして
自動的にサーバに送り込んでいる。

実はそのXMLファイルの容量が数MBになってきてたので、
圧縮してから送信するようにロジックを変更した。
(サーバ側で解凍して通常のXMLファイルに戻す)

圧縮をかけると、XMLファイルで5MBあったものが、
4KBと1/10以下になった!

Base64エンコードをかけたとしてもほぼ1/10のサイズになる!


MEMO(PageViewCounter:155226)