我有一些看起来像这样的代码:
boost::iostreams::filtering_istreambuf in;
in.push(Lz4DecompressionFilter());
in.push(AesDecryptionFilter());
in.push(file_source("somefile"));
我已经有了存储结果长度的元数据:
std::vector<char> buf;
buf.reserve(resultLength /* retrieved from a meta-data server */);
std::streamsize ret = in.read(buf, buf.capacity);
通过添加跟踪点,我发现Lz4和Aes过滤器只能读取128个字节。此外,如果我用自定义设备替换file_source
,它只会读取4096字节。
因为我确切地知道读取应该具有的大小,是否有办法完全禁用iostream中的缓冲并且只是将读取链接到过滤器?我知道我可以change缓冲区大小,但我有兴趣完全禁用它们。
答案 0 :(得分:0)
标准流按定义使用缓冲区抽象。这很大程度上是因为暴露的某些功能需要缓冲区的存在(窥视/回放)。
如果没有缓冲,压缩和加密如何仍然有效?压缩和分组密码都需要操作(有时甚至是固定大小)块。
回复:
另外,如果我用自定义设备替换file_source,它只会读取4096字节。
你会有什么样的行为呢?你期望无限大小读数吗?
array_sink
...)?真的,看起来你只是想增加缓冲区大小是的。