【问题标题】:Connecting two streaming functions c++连接两个流函数c ++
【发布时间】:2015-04-06 01:20:16
【问题描述】:

我有两个功能:

获取 (std::ostream* os) 和 放 (std::istream& 是)

get 函数的方式是,它有多个流,从这些流中收集数据并通过输出流 os.

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

现在,我想编写一段代码来使用 GET 获取数据并对该数据执行 PUT。

但是,我不确定如何写入 istream 或如何实现这段连接器代码。我是使用流的新手,我也试图理解它们。任何帮助将不胜感激。

谢谢, 瑟图

【问题讨论】:

  • 查看 James Kanze 关于过滤流缓冲区的旧文章。

标签: c++ stream iostream ostream istream


【解决方案1】:

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

流的底层机制在流缓冲区中实现,即派生自std::streambuf 的类(或者,如果您想支持其他字符类型,如wchar_tchar32_t,类模板std::basic_streambuf。要覆盖的关键函数是

  • overflow(int_type),只要流缓冲区的缓冲区已满,就会为输出流调用它。
  • sync() 当需要刷新流的缓冲区时调用输出流。
  • underflow() 如果流的缓冲区耗尽,则为输入流调用。

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

【讨论】:

  • 对不起,在写关于詹姆斯文章的评论之前,我没有看到你的答案。但它可能对同一问题的多次讨论很有用。 :) 就在几天前,我刚刚查阅了那篇文章来处理 g++ 的 iostreams 中的一个错误,当流在 Windows 中设置为直接 i/o 模式时,它会在输入时生成双换行符(用于控制台输入)。我采用的解决方案是在收到每个换行符后在原始缓冲区上调用pubsync()。奇怪的。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2021-12-08
  • 2013-05-02
  • 1970-01-01
  • 2021-01-30
  • 2017-04-26
  • 2022-11-02
相关资源
最近更新 更多