【问题标题】:Inflating a compressed byte array in WinRT在 WinRT 中膨胀压缩字节数组
【发布时间】:2012-10-16 03:36:41
【问题描述】:

我正在尝试将以下代码移植到 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 之间的差异太大,我自己也无法重新编译)。

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

【问题讨论】:

  • 在现代 UI 应用程序中使用 SharpZipLib 的唯一方法是针对 .NET Framework WinRT 配置文件进行编译。因此,您可以创建自己的迷你库或重新编译您选择的整个库。
  • Zip 支持已添加到 .NET 4.5,我想您会想要使用 System.IO.Compression.GZipStream

标签: c# windows-8 windows-runtime


【解决方案1】:

好的,感谢 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

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 2011-06-19
    • 2017-12-12
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多