使用vb.net压缩字节数组

时间:2012-10-24 15:28:30

标签: .net vb.net compression

我想用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;
    }

} }  你能告诉我为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

如上所述,无法保证结果输出小于输入。话虽这么说你可能想尝试GZipStream 而不是DeflateStream。我有更好的运气获得平均压缩。但是,如果您的输入数据小于大约1000字节,那么您也可以存储未压缩的数据,因为您平均会有更大的输出大小。

祝你好运。