问答详情
源自:4-2 字节流之文件输入流FileInputStream-2

当中的while问题

public static void main(String[] args) throws IOException{

FileInputStream files = new FileInputStream("C:\\Users\\26023\\Desktop\\html.txt");

int n = 0;

byte[] bytes = new byte[1024*3];

int j = 1;

//从files中读出数据存放到bytes

while((n=files.read(bytes, 0, bytes.length))!=-1){

for(int i = 0 ; i<n;i++) {

System.out.print(Integer.toHexString(bytes[i]&0xff)+" ");

if(j++ %10 == 0) {

System.out.println();

}

}

}

files.close();

}

为什么在while里的for中,要用n(课程里用的bytes)作为限制条件

提问者:the__sky123 2018-06-04 08:54

个回答

  • HungerCheung
    2018-06-27 14:19:56

    以题主的代码为例:

    我所理解题主的困惑在于,for循环中限制条件为什么是n而bytes.length。

    首先我简要解释一下这个n与bytes.length的区别:

    1. length是一个in类型的整数,用于记录bytes这个字节数组的长度。length表示这bytes的最大容量,是一个大小始终不变的固定值。

    2. n是也一个int类型的整数,用于接受file的read方法的返回值。因为这个返回值表示一次读取从bytes数组中到的字节数,所以n就随着每次从bytes中读取的字节数的变化而变化。

    3. 看来这里题主可能会想,file的read方法每次从bytes中读取的字符数难道不都是length吗?这样n岂不是恒等于length吗?这样for有的限制条件不是选择n与length都行了吗?

    上面一连串的推测似乎合情合理。其实题主请思考一下,while循环中的read方法真每次都能读到length个字节码?

    题主是否考虑到read方法读到了文本末尾的情况呢?最后一次读取中,题主所选的文本是否还有足够的字节流入到bytes字节数组呢?到了这里,不知道题主是否明了。

    如果您仍有疑问,可以私我,我会尽快回复。望采纳。

  • yyz要学java
    2018-06-05 00:20:52

    https://img4.mukewang.com/5b15664b0001c8cc08070551.jpg

    https://img4.mukewang.com/5b1566da0001443408950319.jpg

    你把这两段代码对比着来看 应该能明白   定义了一个n专门用来实现读的操作  当读到符号位(-1)的时候 停止读的操作  这其实就是一个普通的for循环