【问题标题】:Using DeflateStream in C++?在 C++ 中使用 DeflateStream?
【发布时间】:2012-01-03 21:44:17
【问题描述】:

我目前正在尝试在没有 .NET 框架支持的情况下将一些涉及 DeflateStream 使用的 C# 代码移植到标准 C++ 中。这种功能的一个例子是:

public static byte[] ReadCompressed(this Stream stream)
{
    var reader = new BinaryReader(stream);
    int len = reader.ReadInt32();
    var array = new byte[len];
    var ds = new DeflateStream(stream, CompressionMode.Decompress);
    ds.Read(array, 0, len);
    ds.Close();
    return array;
}

只是想知道,有没有一种简单的方法可以将上述代码移植到 C++ 中?谢谢!

【问题讨论】:

  • 如果您喜欢重新发明轮子,您将需要像 zlib (zlib.net) 这样的第三方库或自己实现 deflate 算法。
  • @Joe:有没有C++下如何使用zlib的教程?
  • 如果您需要使用 zlib 解压缩最初使用 .NET DeflateStream 类压缩的数据(反之亦然),则需要小心。 zlib 需要 DeflateStream 不生成的数据的前缀和后缀。见tlzprgmr.wordpress.com/2010/03/17/…

标签: c# c++ deflate


【解决方案1】:

您可能想使用zlib。在 C++ 中最简单的方法是使用 Boost wrapper for it

我不完全确定您的示例做了什么,但这里是如何读取 zlib 压缩文件并将其内容写入标准输出(改编自文档中的示例):

namespace io = boost::iostreams;

std::ifstream file("hello.z", std::ios_base::binary);
io::filtering_streambuf<io::input> in;
in.push(io::zlib_decompressor());
in.push(file);
io::copy(in, std::cout);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多