我正在尝试将以下代码移植到WinRT应用程序:
using (var stream = new InflaterInputStream(new MemoryStream(compressedBytes)))
{
MemoryStream memory = new MemoryStream();
byte[] writeData = new byte[4096];
int resLen;
while ((resLen = stream.Read(writeData, 0, writeData.Length)) > 0)
{
memory.Write(writeData, 0, resLen);
}
uncompressedBytes = memory.ToArray();
}
我正在使用SharpZipLib作为其InflaterInputStream
类,但没有可用的WinRT编译(由于.NET / WinRT之间的差异太大,我自己重新编译也不是一个选项。)
任何人都有任何关于我可以用来实现相同结果的原生/第三方功能的建议吗?
答案 0 :(得分:2)
好的,感谢Hans Passant的评论,我发现使用以下行会产生与使用InflaterInputStream相同的结果:
using (DeflateStream stream = new DeflateStream(new MemoryStream(compressedBytes, 2, compressedBytes.Length - 2), CompressionMode.Decompress))
跳过前两个字节的原因是它们是zlib规范的一部分而不是deflate spec:http://george.chiramattel.com/blog/2007/09/deflatestream-block-length-does-not-match.html