C# 使用zlib解压文件-限制为256kb

C# 使用zlib解压文件-限制为256kb,c#,zlib,compression,C#,Zlib,Compression,我希望这里有人能帮我解决这个问题。 我要做的是用C#解压一个zlib压缩文件。(我也试过了) 我遇到的问题是,它只会解压缩前256kb,或者更确切地说是前262144字节。 以下是我的解压缩方法,摘自: 基本上,当while循环第一次执行时,int(read)被设置为262144,它进行写入,然后while循环的下一次传递read被设置为0,从而使循环退出,函数作为数组返回outStream。(即使还有字节需要读取!) 提前感谢任何能帮上忙的人 进一步检查原始压缩数据后,发现负责(反)压缩原始应

我希望这里有人能帮我解决这个问题。 我要做的是用C#解压一个zlib压缩文件。(我也试过了)

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

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


提前感谢任何能帮上忙的人

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

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


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

你试过了吗;删除
read=0或将缓冲区设置为10字节?我有,但是结果保持不变——生成的文件只有262144字节大。你确定gzip数组是正确的吗?我在调试模式下查看了加载的数据,它似乎都在那里——这个函数对于任何小于262144字节的文件也能完美地工作
并在ZlibStream中使用它。在方法末尾,检查
gzipStream.Position==gzip.length
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();
        }
    }