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

如上所述,不能保证生成的输出会小于输入。话虽如此,您可能想尝试GZipStream而不是 DeflateStream。平均而言,我有更好的运气获得不错的压缩效果。但是,如果您的输入数据小于 1000 字节左右,您最好存储未压缩的数据,因为您平均会拥有更大的输出大小。

祝你好运。

于 2012-10-31T17:27:02.930 回答