Использование DeflateStream в C ++? - PullRequest
1 голос
/ 04 января 2012

В настоящее время я пытаюсь перенести некоторые C # -коды, использующие DeflateStream, в стандартный C ++ без поддержки .NET Framework.Одним из примеров такой функции является:

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 ++?Спасибо!

1 Ответ

4 голосов
/ 04 января 2012

Возможно, вы захотите использовать zlib .Самый простой способ сделать это в C ++ - использовать для этого Boost-оболочку .

Я не совсем уверен, что делает ваш пример, но вот как читать в сжатом 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);
...