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