Java 对输入流和读取文件感到困惑

Java 对输入流和读取文件感到困惑,java,inputstream,computer-science,Java,Inputstream,Computer Science,我试图理解inputstreams和读取文件背后的逻辑,但我无法理解如何使用inputstream读取文件 我的理解是,当使用键盘等输入设备时,您可以通过输入流将输入数据发送到系统。如果您正在从输入流读取数据,那么您是否正在读取当时发送到系统的输入数据 如果我们使用以下代码创建inputstream: FileInputStream test = new FileInputStream("loremipsum.txt"); 如果我们尝试使用test.read()从新创建的inputstream

我试图理解inputstreams和读取文件背后的逻辑,但我无法理解如何使用inputstream读取文件

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

如果我们使用以下代码创建inputstream:

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

如果我们尝试使用
test.read()从新创建的inputstream读取数据如何有任何数据流过inputstream?因为当时没有从输入设备输入数据,但事先已经输入。有什么我错过的吗?在我看来,输入流有两种不同的使用方式:Java使用inputstreams从源读取数据,而输入设备使用inputstreams将数据输入源

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

这种抽象允许我们使用相同的方法,无论我们从何处读取数据——它可能是键盘、文件、网络连接、另一个程序的输出,甚至是生成无限数据序列的某种生成器。简单地说,从文件中读取输入的行为与后台有人打开文件并在键盘上快速键入内容的行为相同


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

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

这种抽象允许我们使用相同的方法,无论我们从何处读取数据——它可能是键盘、文件、网络连接、另一个程序的输出,甚至是生成无限数据序列的某种生成器。简单地说,从文件中读取输入的行为与后台有人打开文件并在键盘上快速键入内容的行为相同


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

流不关心输入是否来自键盘、文件或其他东西,它只是将其视为来自某个地方的数据。流不关心输入是否来自键盘、文件或其他东西,它只是将其视为来自某个地方的数据。