【发布时间】:2016-11-30 14:00:35
【问题描述】:
我正在学习 c++(来自 C 和 Java 大学的课程),今天我想编写一个类来过滤从通用流中获取的字节并将其输出写入另一个流。
简而言之,假设我想创建一个对输入进行 base64 编码并将输出写入标准输出的类。
在 bash 中我会写:
echo "some input data" | base64
在 C++ 中,我想实现一个类 MyB64Encoder,其行为如下:
std::cout << myB64EncoderObject << "some input data";
//Alternatively, is it possible to make it like this?
std::cout << MyB64Encoder << "some input data";
问题是,myB64EncoderObject 当然有一个内部状态和一个内部缓冲区。为了防止阻塞和过多的内存使用,它必须能够读取和处理小块数据,并在处理完每个数据块后立即输出。
还有一些事情需要注意:
- 对象必须等待输出流能够接收数据
- 如果没有从对象读取流,则该对象必须抛出错误(有点像断了的管道?)
就效率而言,解决此类问题的最佳方法是什么?我将如何在现代 C++1x 中实现它?
【问题讨论】:
-
包装一个流(或包装一个流缓冲区)。