struct encrypt_stream : public std::stringbuf
{
int sync() { encrypt_buffer(); flush_to_device(); }
...
private:
void encrypt_buffer();
void flush_to_device();
};
我想写这个类来加密文本数据。每次刷新stringbuf
对象时,都会调用sync
并将缓冲区的加密版本发送到设备。加密文本很大程度上取决于调用flush
的时刻。是否有棘手的情况可以在没有用户要求的情况下在此对象上调用flush
?
我知道收到flush
时会调用std::endl
,但还有其他我不知道的情况吗?
答案 0 :(得分:4)
flush()
:
std::endl
时(即显式调用std::ostream::flush()
)[§27.7.3.7/ 7] tie()
- ed的流执行读取时。 [§27.7.2.1.3/ 2] overflow()
将内容提取到外部设备时,[§27.6.3.4.5/ 3] gptr() == egptr()
时,调用underflow()
以丢弃内容并将其缓冲区与外部设备同步。 [§27.6.3.4.3/ 7] 这就是我对标准IOStream的了解。这可能会因您的流或流缓冲区的实现而有所不同。