3

我有一个包含 zlib 压缩(放气)数据的向量。我想用 Boost 的filtering_istream. 他们的网站上只有一个示例,它对数据流进行操作(与我拥有的向量相反)。

vector<char> compressed_buffer;
compressed_buffer.resize(cdh.length);
file.read(&compressed_buffer[0], cdh.length);

filtering_istream in;
in.push(zlib_decompressor());
in.push(something(compressed_data)); // what should "something" be?

我也想将未压缩的数据作为向量获取。我怎样才能做到这一点?

4

2 回答 2

4

一个怎么样array_source

in.push(array_source(&*compressed_data.begin(), &*compressed_data.end()));

然后使用boost::iostreams::copywith astd::insert_iterator将结果字符推送到新向量中。

于 2012-03-04T18:45:45.087 回答
0

接受的答案表明&*compressed_data.end()这是未定义的行为,因为您取消引用了一个过去的迭代器。它只是偶然起作用。正确答案应该使用data()anddata() + size()而不是begin()and end()

in.push(array_source(compressed_data.data(), compressed_data.data() + compressed_data.size()));
于 2021-10-20T08:18:34.970 回答