我很难看到流在IO方面的确切含义。我认为流是来自文件,套接字或任何其他数据源的连续数据流。那是对的吗?但后来我对java程序对流的反应感到困惑,因为当我们编写任何java代码时,请说:
Customer getCustomer(Customer customer)
上述java代码是否要求整个对象在处理之前存在? 现在我们假设我们正在读取类似
的流FileInputStream in = new FileInputStream("abc.txt")
in.read();
不在in.read()期望整个文件存在于内存中以进行处理。如果是,那怎么会是一个流?为什么我们称他们为溪流?他们在阅读时处理数据吗?
阅读hadoop流时出现类似的混淆,看起来它们完全不同。
答案 0 :(得分:2)
“stream”这个词用于不同语境中的不同事物。但是你特别询问I / O中的流,即InputStream
和OutputStream
。
我认为流是来自文件,套接字或任何其他数据源的连续数据流。这是对的吗?
是的,流是字节序列的来源,可能来自文件,套接字等。
关于getCustomer
:您需要将Customer
对象传递给该方法。但是调用方法,传递对象和获取返回的对象实际上与流没有任何关系。
in.read()不希望整个文件存在于要处理的内存中。
没有。 FileInputStream
是表示流的对象。这是知道如何从文件中读取字节的东西。
Streams不是一种基本特殊的对象。它不像是有类,对象和流。 Streams只是一个使用标准Java OO编程功能(类和对象)实现的概念。
答案 1 :(得分:1)
以上java代码是否要求整个对象在处理之前存在?
是。但它不是一个流。
不在in.read()期望整个文件存在于内存中以进行处理。
没有
如果是
不是。
那怎么会是一个流?
是。
为什么我们称他们为溪流?他们在阅读时处理数据吗?
是
类似的混淆
这里没有混淆,除了你在比较方法调用与I / O流时的混淆,比较苹果与橙子。
阅读hadoop流时,看起来他们的意思完全不同。
很可能。
答案 2 :(得分:0)
I / O流表示输入源或输出目标。流可以表示许多不同类型的源和目标,包括磁盘文件,设备,其他程序和内存阵列。
Streams支持许多不同类型的数据,包括简单字节,原始数据类型,本地化字符和对象。有些流只传递数据;其他人以有用的方式操纵和转换数据。
无论它们如何在内部工作,所有流都为使用它们的程序提供相同的简单模型:流是一系列数据。
在Java中有两种流(字节和字符),它们在源和数据之间传输数据的方式不同。目的地。
希望这能回答你的问题。如果您需要任何进一步的信息,请与我们联系。
答案 3 :(得分:-1)
来自here ..
Stream是一个自由流动的元素序列。它们没有任何存储空间,因为这些集合包括数组,列表和集合。每个流都以数据源开始,设置管道,通过管道处理元素并完成终端操作。它们允许我们在不必编写任何并行代码的情况下并行化繁重操作所带来的负载。 Java 8中引入了一个新的java.util.stream包来处理这个特性。
Streams遵循常见的管道和过滤器软件模式。管道是在数据事件流过的情况下创建的,各个中间操作在各个事件通过管道时应用。当管道被终端操作中断时,据说流被终止。请记住,流应该是不可变的 - 在管道期间修改集合的任何尝试都会引发ConcurrentModifiedException异常。