gpt4 book ai didi

c++ - boost filtering_stream 和 tellp

转载 作者:行者123 更新时间:2023-11-28 08:04:41 25 4
gpt4 key购买 nike

我正在尝试使用 filtering_streams 将某些对象的序列化压缩到 array_sink 或类似设备中,然后我可以确定压缩输出的长度并将其复制到另一个流,比如文件。但是,在 filtering_ostream 上使用 ostream::tellp 会导致 boost 抛出运行时异常。我真的不知道我做错了什么。

using namespace boost::iostreams;

char *buffer = new char[4096*255];
array_sink zipStream(buffer, 4096*255);

filtering_ostream tempOut;
tempOut.push(zlib_compressor());
tempOut.push(zipStream);

column->Serialize(tempOut); // Object::Serialize(ostream&)
tempOut.flush(); // ?
int zipSize = tempOut.tellp();

// Do stuff with zipStream...

最佳答案

问题是 tellp 是根据底层流缓冲区 pubseekoff 实现的,与当前写入头位置的偏移量为 0(基本上,这只是糟糕的设计)。现在,这里的关键是 zlib_compressor 不适用于 output_seekable 接收器(如文档中所示)。这是很自然的,因为更改写入头几乎肯定会导致数据损坏。如果您尝试解压缩,您会遇到同样的问题。

关于c++ - boost filtering_stream 和 tellp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10533170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com