编写代码没有按预期输出adcde
public class FISRead {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("read.txt");
while(fis.read()!=-1){
System.out.println((char)fis.read());
}
fis.close();
}
}
b
d
我尝试过以下代码可以得到预期结果
public class FISRead {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("read.txt");
int b;
while((b=fis.read())!=-1){
System.out.println((char)b);
}
fis.close();
}
}
我想知道是为什么造成了这种结果
l第一段代码里,while循环里读取的值没打印啊,循环体里又读一次才打印,相当于把a和c跳过了,输出结果就是b和d。第二段代码就对了,把读出来的值存放到变量后打印
fis.read()方法是读取下一行数据,并返回该行数据。如果你再次调用它就会读取下一行(也就是第二行)。第一段代码中,你取出a做了while判断,输出的时候再次使用fis.read()读取出来的实际上是b。如此循环最后结果就是bd,如果文件中再加个 f 的话,那结果大概就是 bdf 了
改成下边这种方式,因为每次read会移动指针,while判断的那一次移动指针被你跳过了没有输出
read方法每次都取一个一个字节的数据,read方法的逻辑就像是喝水,杯子里的一杯水,每喝掉一口就少一口,相当于read方法每读取一次,流中的数据就取出来一点,所以你两次读取的结果肯定是不一样的