Kas*_*hif 63 c# c++ terminology class stream
C++和C#都使用这个词stream
来命名许多类.
iostream
,istream
,ostream
,,stringstream
等.ostream_iterator
istream_iterator
Stream
,,FileStream
等等.MemoryStream
BufferedStream
所以我很想知道这stream
意味着什么?流的特征是什么?我什么时候可以用这个术语命名我的课程?这仅限于文件I/O类吗?
有趣的是,就我所知,C在任何地方都没有使用这个词.
Mar*_*ell 74
许多数据结构(列表,集合等)充当容器 - 它们拥有一组对象.但不是流; 如果列表是存储桶,则流是软管.您可以从一个流中提取数据,或者将数据推送到流-但通常只有一次,只在一个方向(当然有例外).例如,网络上的TCP数据是流; 您可以发送(或接收)数据块,但只能与其他计算机连接,通常只能连接一次 - 您无法回放Internet.
Streams还可以操纵通过它们的数据; 压缩流,加密流等.但同样 - 这里隐含的隐喻是数据的软管.文件通常也作为流访问(在某种程度上); 您可以访问顺序数据块.当然,大多数文件系统也提供随机访问,因此流提供诸如Seek,Position,Length等之类的东西 - 但并非所有实现都支持这样的.寻找一些流没有意义,或者获得一个开放套接字的长度.
来自I/O Streams(尽管在 java 中,含义与 C++ / C# 中相同)
I/O 流代表输入源或输出目的地。流可以表示许多不同类型的源和目的地,包括磁盘文件、设备、其他程序和内存阵列。
流支持许多不同类型的数据,包括简单字节、原始数据类型、本地化字符和对象。有些流只是传递数据;有些流只是传递数据。其他人以有用的方式操纵和转换数据。
无论它们内部如何工作,所有流都向使用它们的程序呈现相同的简单模型:流是数据序列。程序使用输入流从源读取数据,一次读取一项。
在 C# 中,您提到的流派生自抽象基类Stream。该基类的每个实现都有特定的目的。
例如,FileStream支持对文件进行读/写操作,而MemoryStream则作用于内存中的流对象。FileStream
与和类不同MemoryStream
,BufferedStream类允许用户缓冲 I/O。
除了上面的类之外,还有其他几个类实现该类Stream
。有关完整列表,请参阅有关类的MSDN 文档Stream
。
有几个不同的意思。#1 可能是你的意思,但你可能也想看看 #2。
在像您提到的那些库中,“流”只是“二进制数据”的抽象,它可能是也可能不是随机访问的(与连续生成的数据相反,例如如果您正在编写一个流生成的随机数据),或者可以存储在任何地方(RAM、硬盘、网络、用户大脑等)。它们很有用,因为它们可以让您避免细节,并编写不关心流的特定源的通用代码。
作为一个更一般的计算机科学概念,“流”有时被(松散地)认为是“有限或无限量的数据”。这个概念在没有示例的情况下有点难以解释,但是在函数式编程中(如在 Scheme 中),您可以通过将对象的历史视为变化的“流”来将具有状态的对象变成无状态对象。(这个想法是一个对象的状态可能会随着时间的推移而改变,但是如果你把对象的整个生命周期看作是一个变化的“流”,那么这个流作为一个整体永远不会改变,你可以用它进行函数式编程。)