java - 对输入流和从文件中读取感到困惑

标签 java inputstream computer-science

我试图理解输入流和从文件中读取数据背后的逻辑,但我无法理解如何使用输入流从文件中读取数据。

我的理解是,当使用键盘等输入设备时,您通过输入流将输入数据发送到系统。如果您正在从输入流中读取数据,那么您读取的不是当时发送到系统的输入数据吗?

如果我们使用以下代码创建输入流:

FileInputStream test = new FileInputStream("loremipsum.txt");

如果我们尝试使用 test.read(); 从新创建的输入流中读取数据,那么输入流中如何有数据流过呢?因为当时还没有从输入设备输入输入数据,但是已经预先输入过。我错过了什么吗?在我看来,输入流几乎以两种不同的方式使用:Java 使用输入流从源读取数据,输入设备用于将数据输入到源。

最佳答案

Java 流是一个通用概念/接口(interface) - 您需要打开的数据流,然后从中读取数据(或向输出流写入数据),然后关闭。基本流只支持顺序读/写,不支持随机访问。此外,当您尝试从流中读取数据时,数据可能随时可用,也可能不可用,因此读取可能会阻塞,也可能不会阻塞。

这种抽象允许我们使用相同的方法,无论我们从哪里读取数据 - 它可能是键盘、文件、网络连接、另一个程序的输出,甚至是某种生成无限数据序列的生成器。简而言之,从文件读取输入的行为就像后台有人打开文件并在键盘上输入其内容一样非常快

Java 中有多种方法可以以其他方式读取文件(例如随机访问而不是顺序访问),但如果您需要从头到尾读取文件,流是一个有用的抽象。

关于java - 对输入流和从文件中读取感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52785693/

相关文章:

java - 如何从一个Fragment导航到另一个Fragment?

java - 为什么分包看不到包私有(private)类?

java - 当 InputStream.read(array) 不返回 array.length 时到达流的末尾?

android - 计数器在线程中运行,由 Arduino 信号驱动,跳过前几个数字

java - 使用关于持久性和 XML 的 InputStream 的最佳方式

programming-languages - "subroutine"和 "routine"是同一个概念吗?

binary - 十进制数转二进制数

java - java中HALF_DOWN和HALF_UP有什么区别?

java - 如何使用 Micronaut 和 RabbitMQ 消费和发布消息?

algorithm - 我们可以像估算 Big O 那样估算 Big Omega 吗?