2

vb.netでバイト配列を圧縮したい

このコードを試してみてくださいしかし、結果は非常に悪いです

配列サイズ : 圧縮前 32768 圧縮後 42737

    public static byte[] Compress(byte[] data)
    {
        MemoryStream ms = new MemoryStream();
        DeflateStream ds = new DeflateStream(ms, CompressionMode.Compress);
        ds.Write(data, 0, data.Length);
        ds.Flush();
        ds.Close();
        return ms.ToArray();
    }
    public static byte[] Decompress(byte[] data)
    {
        const int BUFFER_SIZE = 256;
        byte[] tempArray = new byte[BUFFER_SIZE];
        List<byte[]> tempList = new List<byte[]>();
        int count = 0, length = 0;

        MemoryStream ms = new MemoryStream(data);
        DeflateStream ds = new DeflateStream(ms, CompressionMode.Decompress);

        while ((count = ds.Read(tempArray, 0, BUFFER_SIZE)) > 0)
        {
            if (count == BUFFER_SIZE)
            {
                tempList.Add(tempArray);
                tempArray = new byte[BUFFER_SIZE];
            }
            else
            {
                byte[] temp = new byte[count];
                Array.Copy(tempArray, 0, temp, 0, count);
                tempList.Add(temp);
            }
            length += count;
        }

        byte[] retVal = new byte[length];

        count = 0;
        foreach (byte[] temp in tempList)
        {
            Array.Copy(temp, 0, retVal, count, temp.Length);
            count += temp.Length;
        }

        return retVal;
    }

なぜこれが私に起こったのか教えていただけますか?

4

1 に答える 1

0

上記のように、結果の出力が入力よりも小さくなるという保証はありません。そうは言っても、DeflateStream ではなくGZipStreamを試してみてください。私はそれから平均してまともな圧縮を得たほうが運が良かった. ただし、入力データが約 1000 バイトよりも小さい場合は、平均して出力サイズが大きくなるため、圧縮されていないデータを保存することもできます。

幸運を。

于 2012-10-31T17:27:02.930 に答える