百度百科:
计算机中的流其实是一种信息的转换。它是一种有序流,因此相对于某一对象,通常我们把对象接收外界的信息输入(Input)称为输入流,相应地从对象向外输出(Output)信息为输出流,合称为输入/输出流(I/O Streams)。对象间进行信息或者数据的交换时总是先将对象或数据转换为某种形式的流,再通过流的传输,到达目的对象后再将流转换为对象数据。所以,可以把流看作是一种数据的,通过它可以实现数据交换和传输。
数据流的概念
数据流(data stream)最初是通信领域使用的概念,代表传输中所使用的信息的数字编码信号序列。然而,我们所提到的数据流概念与此不同。这个概念最初在1998年由Henzinger在文献87中提出,他将数据流定义为“只能以事先规定好的顺序被读取一次的数据的一个序列”。
可以再读一读该词条详细内容,介绍了流的性质。
IO流
流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出 [1] 。
选择“流”这个词是因为它代表(在现实生活中)与我们在使用它时要传达的内容非常相似的含义。
让我们暂时忘记后备商店,并开始考虑与水流的类比。您可以获得连续的数据流,就像水不断流入河流一样。您不一定知道数据的来源,通常您不需要;无论是从文件,套接字还是任何其他来源,它都不(不应该)真正重要。这与接收水流非常相似,因此您无需知道它来自何处;无论是从湖泊,喷泉还是其他任何来源,它都不(不应该)真的很重要。
也就是说,一旦你开始认为你只关心获取所需的数据,无论它来自哪里,其他人谈论的抽象变得更加清晰。你开始认为你可以包装流,你的方法仍然可以完美地工作。
另一种解释:
关键是你不应该知道后备存储是什么 - 它是对它的抽象。 实际上,甚至可能没有后备存储 - 您可能正在从网络中读取数据,并且数据永远不会“存储”。
如果您可以编写的代码无论您是在与文件系统,内存,网络还是其他任何支持流概念的内容进行通信,那么您的代码就会更加灵活。
此外,流通常链接在一起 - 你可以有一个流压缩放入其中的任何内容,将压缩的表单写入另一个流,或者加密数据的流,等等。另一端是反向的 链,解密,解压缩等等。