为了账号安全,请及时绑定邮箱和手机立即绑定

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下载
官方微信