最贊回答 / 牙膏牙膏牙膏
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