我正在尝试解压缩由 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。