什么是 C++ 中的流?

Posted

技术标签:

【中文标题】什么是 C++ 中的流?【英文标题】:What is a stream in C++? 【发布时间】:2012-08-22 03:22:09 【问题描述】:

我听说过流,更具体地说是文件流。

那么它们是什么?

它是在内存中有位置的东西吗?

它是包含数据的东西吗?

它只是文件和对象之间的连接吗?

【问题讨论】:

作为一个在某些时候也不理解这一点的人,现在我在这里添加了一个答案:***.com/a/52936291/3933131希望能帮助一些人。请注意,它主要是用 C 语言解释的,所以我没有在此处添加它,但是,我认为如果您仔细阅读它,您仍然可以了解它。 【参考方案1】:

Stream 是线性队列,它将文件连接到程序并保持双向数据流。这里的来源是任何文件、I/O 设备、硬盘、CD/DVD 等。

流基本上是两种类型 1.Text Stream 2.Binary stream

文本流:它是一个排列成行的字符序列,每行以换行符结束(unix)。

二进制流:它是在计算机主存储器内部编码的数据,未经任何修改。

【讨论】:

【参考方案2】:

术语流是一种结构的抽象,它允许您发送或接收未知数量的字节。比喻是水流。您可以随时获取数据,也可以根据需要发送数据。例如,将其与具有固定已知长度的数组进行对比。

使用流的示例包括读取和写入文件、通过外部连接接收或发送数据。然而,stream 这个术语是通用的,并没有说明具体的实现。

【讨论】:

所以它就像一条“河流”,从源头流向目的地。而小溪就是河流本身 所以我可以将流视为将(例如)数据从控制台带到变量的东西 什么是“卡在里面”?没有关于流的一般概念来定义可以传输哪种数据或如何传输它。如果您的意思是卡在它不会随流流动,那么这听起来像是一个错误。我没有足够的信息可以说。 我想很多教书的人都发现技术细节最好用技术术语来解释。隐喻并不总是合适的,很可能会助长错误的结论。 @KerrekSB:“流”这个词本身就是一个隐喻。所以在这种情况下解释这个比喻似乎很合适。【参考方案3】:

文件系统设计用于与各种设备一起工作,包括终端、磁盘驱动器、磁带驱动器等。即使每个设备都不同,文件系统也将每个设备转换为称为流的逻辑设备.流是独立于设备的,因此可以使用相同的函数来写入磁盘文件和磁带文件。在更专业的术语中,流提供了程序员和实际使用的设备之间的抽象。

【讨论】:

【参考方案4】:

iostreams 是一个前端接口(@98​​7654321@,std::ostream),用于定义输入和输出函数。流还存储格式化选项,例如,用于整数输出的基数,并为所有类型的自定义保存一个 std::locale 对象。它们最重要的组件是指向std::streambuf 的指针,它定义了如何访问字符序列,例如文件、字符串、屏幕上的区域等。专门针对文件和字符串提供了特殊的流缓冲区和类提供从流基类派生的以便于创建。描述 IOStreams 库的全部功能几乎可以写满整本书:在 C++ 2003 中,大约一半的库部分专门用于与流相关的功能。

【讨论】:

以上是关于什么是 C++ 中的流?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中的流类型,如何从 IstringStream 中读取?

什么是PHP中的流和流包装器

C++各种输出模式

C++ 介绍(十四)——IO流

协程中的流

协程中的流