if ((i = fis.read()) != -1) 在此程序中到底意味着什么?

Rsp*_*Rsp 3 java

package IO;
import java.io.*;
public class test {

public static void main(String[] args) throws IOException {
    File f1 = new File("C:\\Users\\rs\\New folder\\myname.txt");
    try {
        FileInputStream fis = new FileInputStream(f1);
        int i = fis.read();     
        System.out.print((char)i);
        while((i = fis.read())!= -1) {
            System.out.print((char) i );
        }
        
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

 }

}
Run Code Online (Sandbox Code Playgroud)

我是一名新的java程序员,我在这段代码中遇到了麻烦。这段代码从我的文件(f1)中读取字节,我可以将这些字节转换为 char 并打印它们,但是这里有些东西我不明白,它是我的 while 循环中的条件。它到底意味着什么?我的意思到底是什么if ((i = fis.read()) != -1)意思???第二个问题是为什么我们要加 i = fis.read()括号???我的文件中有一个文本(1 行)。

ara*_*ran 5

FileInputStreamread()方法遵循以下逻辑:

从此输入流读取一个字节的数据。如果尚无可用输入,则此方法会阻塞。

该方法将返回

数据的下一个字节,如果到达文件末尾则为 -1。

-1它的支票标志也是如此EOF。考虑到这一点,这段代码片段

while((i = fis.read())!= -1) 
      System.out.print((char) i);
  
Run Code Online (Sandbox Code Playgroud)

正在告诉我们:

1 . 分配fis.read()给变量i

2a . 如果i != -1,则打印ASCII char代表刚刚从输入流读取的整数,并继续循环

2b . 如果i == -1则结束循环/停止读取,因为它到达了文件末尾。