C++中的流是什么?

62

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

那么它们是什么?

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

它是包含数据的东西吗?

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


作为曾经也不理解这个问题的人,我现在在这里添加了一个答案:https://dev59.com/OVkT5IYBdhLWcg3wZusA#52936291,希望能帮助一些人。请注意,它主要是用C语言解释的,这就是为什么我没有在这里添加它的原因,但是,如果你仔细阅读,我认为你仍然可以很好地理解它。 - M-J
4个回答

60

流(stream)是一个抽象概念,它允许您发送或接收数量未知的字节。这个比喻就像一条水流。您按需获取数据,或根据需要发送数据。相对于例如有固定长度的数组而言,流是没有固定长度的。

使用流的例子包括读写文件、在外部连接中接收或发送数据。但是,“流”这个术语是泛指的,并不能说明具体的实现细节。


4
就像一条从源头流向目的地的“河流”,而这条河流本身就是那条河。 - Mohamed Ahmed Nabil
1
所以我可以将流视为从控制台将数据带到变量的东西。 - Mohamed Ahmed Nabil
1
“卡住了”是什么意思?关于流的一般概念并没有定义可以传输哪种数据或如何传输数据。如果您指的是卡住了,无法随着流动而移动,那么这听起来像是一个错误。我没有足够的信息来判断。 - Jonathan Wood
3
我认为许多教学者发现技术细节用专业术语来解释最好。隐喻并不总是合适的,可能会引导错误的结论。 - Kerrek SB
4
“stream”这个词本身就是个隐喻,因此在这种情况下解释这个隐喻似乎是合适的。 - Jonathan Wood
显示剩余3条评论

12

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


9

流是将文件与程序连接并在两个方向上维护数据流的线性队列。此处的源可以是任何文件、I/O设备、硬盘、CD/DVD等。

基本上,流分为两种类型:1.文本流 2.二进制流

文本流:它是一系列按行排列的字符,并且每行以换行符(unix)结尾。

二进制流:它是计算机主存储器中实际编码的数据,没有任何修改。


4

文件系统旨在与各种设备一起使用,包括终端、磁盘驱动器、磁带驱动器等。尽管每个设备都不同,但文件系统将每个设备转换为称为流的逻辑设备。流是独立于设备的,因此可以使用相同的函数来编写磁盘文件和磁带文件。更确切地说,流提供了程序员和实际使用的设备之间的抽象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接