我有两个函数:
Get (std::ostream* os) and把(std:: istream&)
get函数的方式是,它有多个流,从中收集数据并通过输出流os发送出去。
另一方面,Put将输入流中的数据写入多个流中,这些流最终存储数据。
现在,我想写一段代码来使用get获取数据,并对该数据进行PUT操作。
但是,我不确定如何写入istream或如何实现这段连接器代码。我刚开始使用流,我也在尝试理解它们。如有任何帮助,不胜感激。
谢谢,Sethu
看起来,您想创建一些将写入Get()
的std::ostream
到Put()
的std::istream
的数据通道。要做到这一点,你需要编写一个合适的流,它可能需要处理连接多个线程。如果从Get()
返回后,从Get()
写入的流中读取数据就足够了,那么您可以直接写入std::ostringstream
,并使用std::istringstream
将写入的字节提供给Put()
。我猜你想要更直接的联系,并描述一下一般的方法。
流的底层机制是在流缓冲区中实现的,即从std::streambuf
派生的类(或者,如果你想支持其他字符类型,如wchar_t
或char32_t
,可以使用类模板std::basic_streambuf
)。要重写的关键函数是
-
overflow(int_type)
,当流缓冲区的缓冲区已满时,为输出流调用。 -
sync()
,当输出流的缓冲区需要刷新时调用。 -
underflow()
,当输入流的缓冲区耗尽时调用。
如何实现处理的细节稍微复杂一些。我已经写了很多答案,解释了创建流缓冲区的各种用途。对于连接输出流和输入流的流,请看下面的答案: