为了账号安全,请及时绑定邮箱和手机立即绑定

当中的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)作为限制条件

正在回答

2 回答

以题主的代码为例:

我所理解题主的困惑在于,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字节数组呢?到了这里,不知道题主是否明了。

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

1 回复 有任何疑惑可以回复我~

https://img1.sycdn.imooc.com//5b15664b0001c8cc08070551.jpg

https://img1.sycdn.imooc.com//5b1566da0001443408950319.jpg

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

当中的while问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信