使用 zlib 解压缩文件 - 卡在 256kb 限制

Decompress file using zlib - stuck at 256kb limit

我希望这里有人能够帮助我解决这个问题。 我想做的是使用 ZlibNet. (I've also tried DotNetZip and SharpZipLib)

在 C# 中解压一个 zlib 压缩文件

我遇到的问题是它只会解压缩前 256kb,或者更确切地说是前 262144 字节。 这是我的解压方法,取自 here:

public static byte[] Decompress(byte[] gzip)
    {
        using (var stream = new Ionic.Zlib.ZlibStream(new MemoryStream(gzip), Ionic.Zlib.CompressionMode.Decompress))
        {
            var outStream = new MemoryStream();
            const int size = 999999; //Playing around with various sizes didn't help
            byte[] buffer = new byte[size];

            int read;
            while ((read = stream.Read(buffer, 0, size)) > 0)
            {
                outStream.Write(buffer, 0, read);
                read = 0;
            }

            return outStream.ToArray();
        }
    }

基本上,int(读取)在 while 循环第一次执行时被设置为 262144,它写入,然后 while 循环的下一次传递,读取被称为 0,从而使循环退出并函数 return 将 outStream 作为数组。 (即使还有字节要读取!)

在此先感谢任何对此提供帮助的人!

进一步检查原始打包数据后发现,原始应用程序中负责(解)压缩数据的脚本会将文件的 zlib 流拆分为每个 262144 字节的块。

这就是为什么我测试的各种库总是停在 262144 字节处——这是 zlib 流的结尾,而不是它应该提取的文件的结尾。 (每个 zlib 流也由一个 32 位无符号整数分隔,指示下一个 zlib 流将包含的字节数)

我唯一的猜测是他们这样做是为了如果他们有一个非常大的文件,他们不需要将所有文件加载到内存中进行解压缩。 (但这只是一个猜测。)