最赞回答 / 牙膏牙膏牙膏
in.read(buf,0,buf.length),这个方法返回的是它读取到的字节个数!正如你假设的,文件100字节,buf容量80字节:第一次读取的时候是返回80;第二次进入while的时候,文件读取的字节是从第81个字节开始(读取的时候文件有个指针一边读一边移动的,前面老师讲过),就是说文件还剩下20个字节可读,所以这时候返回的字节是20;第三次进入while的时候,文件已经没有内容可读了,所以返回的是-1;这时候就跳出了while!纯手打!望采纳!
2018-07-21
已采纳回答 / qq_星河k_0
问题和代码无关,你只要输出System.out.println(0xffffffff)就会得到-1;原因是int 是有符号位,占4个字节,而0xffffffff是以int类型存储的,int是有符号的。即1111 1111 1111.......第一位被用来记录符号,所以这里就被解释为负号了,而Java在编码时,存储的是负数的补码,所以你的1111.....就成了1000......+1就是10000.....1就是-1啦。所以16进制最大的数是0x7fffffff.
2018-07-17
已采纳回答 / 神乐Triste
您说的是in是什么类型的呢,FileInputStream?在FileInputStream的read()方法中有返回值为int类型的重载函数.
2018-07-07
已采纳回答 / 一把年纪小二郎
因为你的只导入了BufferReader的包,没有导入其余流对应的包 你可以改为1.导入你目前代码中使用的流包2.直接导入java.io.*所有的IO包
2018-06-18
已采纳回答 / HungerCheung
问题原因:<...code...>解决方法:
//注释掉或者直接删除下面这行代码可以得到和老师同样的结果 //Bar2 bar2 = new Bar2(); //该程序是为了测试反序列化得到对象是否调用其构造方法 //因此重新新建一个Bar2的实体对象是完全没有必要的,反而会混淆测试结果
2018-06-05
最赞回答 / HungerCheung
以题主的代码为例:我所理解题主的困惑在于,for循环中限制条件为什么是n而bytes.length。首先我简要解释一下这个n与bytes.length的区别:length是一个in类型的整数,用于记录bytes这个字节数组的长度。length表示这bytes的最大容量,是一个大小始终不变的固定值。n是也一个int类型的整数,用于接受file的read方法的返回值。因为这个返回值表示一次读取从bytes数组中到的字节数,所以n就随着每次从bytes中读取的字节数的变化而变化。看来这里题主可能会想,file的...
2018-06-04