2

我正在尝试将以下代码移植到 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();
}

我在其InflaterInputStream类中使用 SharpZipLib,但没有可用的 WinRT 编译(由于 .NET/WinRT 之间的差异太大,自己重新编译也不是一种选择)。

有人对我可以使用哪些本机/第 3 方功能来实现相同结果有任何建议吗?

4

1 回答 1

2

好的,感谢 Hans Passant 的评论,我发现使用以下行会产生与使用 InflaterInputStream 相同的结果:

using (DeflateStream stream = new DeflateStream(new MemoryStream(compressedBytes, 2, compressedBytes.Length - 2), CompressionMode.Decompress))

跳过前两个字节的原因是它们是 zlib 规范的一部分,而不是 deflate 规范: http: //george.chiramattel.com/blog/2007/09/deflatestream-block-length-does-not-match .html

于 2012-10-15T19:36:41.110 回答