我正在尝试解压缩由 php deflate 实现压缩的缓冲区。这是代码:
    public static void CopyTo(Stream src, Stream dest)
    {
        byte[] bytes = new byte[4096];
        int cnt, i = 0;
        while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0 )
        {
            dest.Write(bytes, 0, cnt);
        }
        dest.Flush();
    }
    public static byte[] Unzip(byte[] bytes)
    {
        using (var msi = new MemoryStream(bytes))
        using (var mso = new MemoryStream())
        {
            using (var gs = new DeflateStream(msi, CompressionMode.Decompress))
            {
                msi.ReadByte();
                msi.ReadByte();
                CopyTo(gs, mso);
            }
            return mso.ToArray();
        }
    }
如您所见,我正在从源流中读取前 2 个字节,否则 DeflateStream 会抛出异常,说明块大小无效。但是,我的问题是,对于某些文件,此代码就像一个魅力,但对于其他文件,它会给出损坏的结果(一个文件只有文件的一部分。给人的印象是它没有解压缩整个文件)。有人知道出了什么问题吗?
谢谢
更新
我发现了用于压缩数据的 PHP 函数。它是gzcompress。