std :: ostream是否在内部存储输出以及如何获取它?

时间:2016-08-04 00:22:27

标签: c++ iostream

std::ostream是否存储内部发送到输出的字节?
如果确实如此,有没有办法读回来?

假设我需要检查9字节前已经发送到输出流的字节,以便在当前位置再次将其发送到输出。有没有办法做到这一点,如果没有维护一个单独的缓冲区到目前为止所有输出的副本? std::streambuf可以用于此吗?

如果没有办法控制已发送到输出的数据,那么最好的方法是什么? (复制已经发送到输出的数据片段,然后在当前位置再次输出。)

编辑:也许我会给你一些背景信息:
我有一段代码,它使用两个指针进入缓冲区:源指针和目标指针。它可以以类似流的方式将一些数据从源复制到目标,在复制数据时移动指针(源和目标)。
但有时它还需要复制目标缓冲区内的数据:从目标缓冲区中的一个位置到目标缓冲区中的另一个位置。假设它从9个字节前读取并写入当前位置,在复制后移动两个指针。

现在我正在尝试使用输入/输出迭代器将此代码从低级C重写为C ++。首先,我使用std::istreambuf_iterator代替源指针,绑定到std::cinstd::ifstream,并std::ostreambuf_iterator代替目标指针。起初它似乎工作,直到我意识到我还需要从目标缓冲区读回来的可能性:P但是std::ostreambuf_iterator只能输出并进一步移动。它不能回读也不能回头:/所以我需要别的东西,但我不确定到底是什么。我所知道的是,我永远不需要从当前位置读取超过65535个字节,所以我猜这是我需要自己维护的输出缓冲区的大小。但是我应该将哪种类型的迭代器用于以前使用源和目标指针的函数? std::istreambuf_iteratorstd::ostreambuf_iterator似乎并不适合。我需要能够从目标缓冲区中的当前位置构造第三个迭代器,但是有一些负偏移量,并使用它来读取我的函数内部。

0 个答案:

没有答案