C++ 连接两个流媒体功能c++;

C++ 连接两个流媒体功能c++;,c++,stream,iostream,ostream,istream,C++,Stream,Iostream,Ostream,Istream,我有两个职能: 获取(std::ostream*os)和 Put(标准::istream&is) get函数的方式是,它下面有多个流,从中收集数据并通过输出流os发送出去 另一方面,将输入流中的数据写入下面的多个流中,最终存储数据 现在,我想编写一段代码,使用get获取数据,并对数据进行PUT 但是,我不确定如何写入istream或如何实现这段连接器代码。我不熟悉使用流,我也在努力理解它们。任何帮助都将不胜感激 谢谢, Sethu看起来,您想要创建一些东西,将写入Get()的std::ostre

我有两个职能:

获取(std::ostream*os)和 Put(标准::istream&is)

get函数的方式是,它下面有多个流,从中收集数据并通过输出流os发送出去

另一方面,将输入流中的数据写入下面的多个流中,最终存储数据

现在,我想编写一段代码,使用get获取数据,并对数据进行PUT

但是,我不确定如何写入istream或如何实现这段连接器代码。我不熟悉使用流,我也在努力理解它们。任何帮助都将不胜感激

谢谢,
Sethu

看起来,您想要创建一些东西,将写入
Get()
std::ostream
的数据传输到
Put()
std::istream
。为此,您需要编写一个合适的流,该流可能需要处理连接多个线程的问题。如果从
Get()
返回后从
Get()
写入的流中读取数据就足够了,您可以只写入
std::ostringstream
,并使用
std::istringstream
将写入的字节提供给
Put()
。我假设您想要更直接的连接,并描述一般方法

流的基本机制是在流缓冲区中实现的,即从
std::streambuf
派生的类(或者,如果您希望支持其他字符类型,如
wchar\u t
char32\u t
,则类模板
std::basic\u streambuf

  • 溢出(int_type)
    每当流缓冲区的缓冲区满时,对输出流调用该溢出
  • sync()
    当需要刷新流的缓冲区时,为输出流调用该函数
  • underflow()

关于如何实现处理的细节有点复杂。我已经写了许多答案,解释了创建流缓冲区的各种用途。对于将输出流连接到输入流的流,请查看。

查看James Kanze关于过滤流缓冲区的旧文章。很抱歉,在写这篇文章之前,我没有看到您的答案评论James的文章。但这可能对同一问题的多次讨论很有用。:)几天前,我刚刚查阅了那篇文章,以处理g++的iostreams中的一个错误,在Windows中将流设置为直接I/o模式(用于控制台输入)时,它在输入上生成了双换行符。我采用的解决方案是在每次收到换行后在原始缓冲区上调用
pubsync()
。奇怪.-)