Java:解释流和I/O流的区别

7
我正在寻找一个好的解释来说明Java 8中的“新”Streams和Java 7之前的“旧”I/O Streams之间的区别。对于没有任何函数式编程知识的人来说,很难理解它们是完全不同的东西,特别是因为它们的名称相同。我知道Stream API是全新的,甚至在某些方面具有革命性,但在我的幼稚思维中,在这两种情况下,我们都处理“事物”的序列,无论是字节、数据还是对象... 请问有人能提供一个好的解释吗?

I/O流是从某个源头传输数据、位和字节的流。Java8流是遍历集合的一种方式。它们用于完全不同的事情。 - Tobb
1
你正在要求我们比较一种将方法应用于某种形式的集合中的机制和编写(或读取)字节的概念。这些概念并不是非常相似的。 - Elliott Frisch
是的,我知道,但这对我来说有些太模糊了。能不能像解释数据结构一样解释一下,其中一个是数据结构(?),另一个是...什么? - codebat
"I/O流" 用于读取/写入字节进行输入/输出,主要用于文件和网络套接字。新的 "Streams" 用于函数式编程,主要用于处理集合。它们除了偶然的“名称冲突”之外没有任何关系。 - Andreas
4
两者都处理事物的序列,无论是字节、数据还是对象... 在这个抽象的概念层面上,实际上没有真正的区别。我认为这就是它们都被命名为“流”的原因。 - Sartorius
3个回答

7
它们彼此没有关联,我同意,IO流在“新”流到来之前已经有了它们的名称,这很不幸。I/O流旨在作为与外部资源(主要是文件,但也包括其他资源)的连接。新的流用于函数式编程,应该单独处理。但实际上,您可以同时使用两个概念。例如,BufferedReader具有一个lines方法,它将文件(或其他资源)的行作为字符串流返回。

4

让我们来看一下图示化的I/O流。

enter image description here

与 I/O 流相关的有三个涉及概念: 目的地元素(用字母“e”表示),其中

  • 或者 目的地 可以是文件、网络连接、管道、内存缓冲等。
  • 元素 就是简单的数据块,而一个则由一系列元素组成。

什么时候使用哪个?

I/O 流 用于从源读取内容,或将内容写入目的地。就是这样,非常简单 :-)

Java 8 中引入的新 Stream 概念与 I/O 流无关。Streams 不是数据结构本身,而是允许您以声明方式(函数式操作)操纵数据集合的类。


3

就“流”而言,它们没有区别。流是一个抽象的短语,表示具有源和目的地的东西。而且它代表着一系列数据。

就这两种机制而言,它们之间有很多差异。例如,Java I/O 流只允许您读写数据。如果您想要处理该流中的数据,则没有内置机制可以实现。在 Java 8 中的流中,有额外的处理可能性,例如 map/filter 等。


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