亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

read()的返回值怎么會出現不一樣的結果呢?

int bytes = 0;

bytes = in.read(buf, 0, buf.length);

System.out.println(bytes);

System.out.println(bytes = in.read(buf,0,10));

System.out.println(bytes = in.read(buf, 0, buf.length));

返回值分別是

100

-1

-1

這種不同的返回值是怎么出現的呢?源碼里面的判斷么?

正在回答

5 回答

read() 返回的是 讀入緩存的總字節數;如果因為已到達流末尾而不再有數據可用,則返回 -1。

返回 100,說明已經讀取了100個字節數到緩存數組中;

返回-1,說明已經讀取到了流末尾,沒有數據可讀了。

上面代碼,第一次已經一次性把流內的字節讀完了,所以后面都是返回-1。

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

其中一段是這樣的~

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

public static void printHexBYByteArray(String fileName)throws IOException{

FileInputStream in = new FileInputStream(fileName);

byte [] buf = new byte[8*1024];

// int bytes = in.read(buf,0,buf.length);//一次性讀完,說明字節數組足夠大

// int j = 1;

// for(int i = 0;i<bytes;i++)

// {

// if(buf[i]<=0xf)

// {

// System.out.print("0");

//

// }

// System.out.print(Integer.toHexString(buf[i])+" ");

// if(j++%10 == 0)

// {

// System.out.println();

// }


int bytes = 0;

// bytes = in.read(buf, 0, buf.length);

// System.out.println(bytes);

// System.out.println(bytes = in.read(buf,0,10));

// System.out.println(bytes = in.read(buf, 0, buf.length));

//

int j = 0;

while((bytes = in.read(buf, 0, buf.length))!=-1){

for(int i = 0; i<bytes ; i++)

{

if(buf[i] <= 0xf)

{

System.out.print("0");

}

System.out.print(Integer.toHexString(buf[i] & 0xff)+" ");

if(j++%10 == 0)

{System.out.println();}}}

in.close();}

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

完整的和老師演示的是一樣的,我就是把bytes單獨提出來讓它賦值?in.read(buf, 0, buf.length),然后出現上面的額結果

0 回復 有任何疑惑可以回復我~
#1

Leiky灬

第幾題,你又沒寫,不知道在哪啊
2015-10-30 回復 有任何疑惑可以回復我~

完整代碼來一發

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

舉報

0/150
提交
取消

read()的返回值怎么會出現不一樣的結果呢?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號