當(dāng)中的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中讀出數(shù)據(jù)存放到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)作為限制條件
2018-06-27
以題主的代碼為例:
我所理解題主的困惑在于,for循環(huán)中限制條件為什么是n而bytes.length。
首先我簡要解釋一下這個n與bytes.length的區(qū)別:
length是一個in類型的整數(shù),用于記錄bytes這個字節(jié)數(shù)組的長度。length表示這bytes的最大容量,是一個大小始終不變的固定值。
n是也一個int類型的整數(shù),用于接受file的read方法的返回值。因為這個返回值表示一次讀取從bytes數(shù)組中到的字節(jié)數(shù),所以n就隨著每次從bytes中讀取的字節(jié)數(shù)的變化而變化。
看來這里題主可能會想,file的read方法每次從bytes中讀取的字符數(shù)難道不都是length嗎?這樣n豈不是恒等于length嗎?這樣for有的限制條件不是選擇n與length都行了嗎?
上面一連串的推測似乎合情合理。其實題主請思考一下,while循環(huán)中的read方法真每次都能讀到length個字節(jié)碼?
題主是否考慮到read方法讀到了文本末尾的情況呢?最后一次讀取中,題主所選的文本是否還有足夠的字節(jié)流入到bytes字節(jié)數(shù)組呢?到了這里,不知道題主是否明了。
如果您仍有疑問,可以私我,我會盡快回復(fù)。望采納。
2018-06-05
你把這兩段代碼對比著來看 應(yīng)該能明白 ? 定義了一個n專門用來實現(xiàn)讀的操作 ?當(dāng)讀到符號位(-1)的時候 停止讀的操作 ?這其實就是一個普通的for循環(huán) ?