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)作为限制条件
以题主的代码为例:
我所理解题主的困惑在于,for循环中限制条件为什么是n而bytes.length。
首先我简要解释一下这个n与bytes.length的区别:
length是一个in类型的整数,用于记录bytes这个字节数组的长度。length表示这bytes的最大容量,是一个大小始终不变的固定值。
n是也一个int类型的整数,用于接受file的read方法的返回值。因为这个返回值表示一次读取从bytes数组中到的字节数,所以n就随着每次从bytes中读取的字节数的变化而变化。
看来这里题主可能会想,file的read方法每次从bytes中读取的字符数难道不都是length吗?这样n岂不是恒等于length吗?这样for有的限制条件不是选择n与length都行了吗?
上面一连串的推测似乎合情合理。其实题主请思考一下,while循环中的read方法真每次都能读到length个字节码?
题主是否考虑到read方法读到了文本末尾的情况呢?最后一次读取中,题主所选的文本是否还有足够的字节流入到bytes字节数组呢?到了这里,不知道题主是否明了。
如果您仍有疑问,可以私我,我会尽快回复。望采纳。
你把这两段代码对比着来看 应该能明白 定义了一个n专门用来实现读的操作 当读到符号位(-1)的时候 停止读的操作 这其实就是一个普通的for循环