使用 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 流将包含的字节数)
我唯一的猜测是他们这样做是为了如果他们有一个非常大的文件,他们不需要将所有文件加载到内存中进行解压缩。 (但这只是一个猜测。)
我希望这里有人能够帮助我解决这个问题。 我想做的是使用 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 流将包含的字节数)
我唯一的猜测是他们这样做是为了如果他们有一个非常大的文件,他们不需要将所有文件加载到内存中进行解压缩。 (但这只是一个猜测。)