std::ostream
是否存储内部发送到输出的字节?
如果确实如此,有没有办法读回来?
假设我需要检查9字节前已经发送到输出流的字节,以便在当前位置再次将其发送到输出。有没有办法做到这一点,如果没有维护一个单独的缓冲区到目前为止所有输出的副本? std::streambuf
可以用于此吗?
如果没有办法控制已发送到输出的数据,那么最好的方法是什么? (复制已经发送到输出的数据片段,然后在当前位置再次输出。)
编辑:也许我会给你一些背景信息:
我有一段代码,它使用两个指针进入缓冲区:源指针和目标指针。它可以以类似流的方式将一些数据从源复制到目标,在复制数据时移动指针(源和目标)。
但有时它还需要复制目标缓冲区内的数据:从目标缓冲区中的一个位置到目标缓冲区中的另一个位置。假设它从9个字节前读取并写入当前位置,在复制后移动两个指针。
现在我正在尝试使用输入/输出迭代器将此代码从低级C重写为C ++。首先,我使用std::istreambuf_iterator
代替源指针,绑定到std::cin
或std::ifstream
,并std::ostreambuf_iterator
代替目标指针。起初它似乎工作,直到我意识到我还需要从目标缓冲区读回来的可能性:P但是std::ostreambuf_iterator
只能输出并进一步移动。它不能回读也不能回头:/所以我需要别的东西,但我不确定到底是什么。我所知道的是,我永远不需要从当前位置读取超过65535个字节,所以我猜这是我需要自己维护的输出缓冲区的大小。但是我应该将哪种类型的迭代器用于以前使用源和目标指针的函数? std::istreambuf_iterator
和std::ostreambuf_iterator
似乎并不适合。我需要能够从目标缓冲区中的当前位置构造第三个迭代器,但是有一些负偏移量,并使用它来读取我的函数内部。