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

关于while((b=in.read(by,0,by.length))!=-1),这个这的返回值是怎么回事?

如果说in.read(by.0.by.;ength)读满之后返回的是-1;那么在上一个例子中的int bytes的值最后不就是-1了吗

public void putByByteArrays(File file) throws IOException{

long start=System.currentTimeMillis();

FileInputStream in=new FileInputStream(file);

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

int bytes=in.read(by,0,by.length);

这里的bytes为什么不是-1?难道还没有读取完吗?

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

if((by[i]&0xff)<=0xf){

System.out.print("0");

}

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

if(++i%10==0){

System.out.println();

}

}

in.close();

long end=System.currentTimeMillis();

System.out.println("时间:"+(end-start));

}


正在回答

4 回答

读完了就返回 -1。

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

out.write(buf,0,b);

将长度为b(其中b = in.read(buf, 0, buf.length))的字节从字节数组buf的第0个位置开始写入到流


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

int bytes=in.read(by,0,by.length) 返回的是长度。

while((b=in.read(by,0,by.length))!=-1)循环读取,  第一次直接读完了,返回了长度, 打印。 再循环读,返回-1

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

慕工程2957023 提问者

感谢;如果是这样,感觉老师的while循环就没有什么意义,直接 byte[] by=new byte[20*1024]; int b; b=in.read(by,0,by.length); out.write(by,0,b); System.out.println("b的值"+b); out.flush(); in.close();out.close(); 直接这样就好了,执行结果一样,为什么还要加个while循环啊
2016-06-29 回复 有任何疑惑可以回复我~
#2

染红_街道 回复 慕工程2957023 提问者

如果文件特别大你一次读不完呢,这就是例如每次读取100个字节,然后写入,再读100个字节
2016-07-03 回复 有任何疑惑可以回复我~

int b;

while((b=in.read(by,0,by.length))!=-1){

out.write(by,0,b);

System.out.println(b);

out.flush();

}

System.out.println("的值"+b)//;这里b的值确实是-1;

可是上一个例子中bytes为什么不是-1?


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

染红_街道

那句话我感觉有问题 不过b的值一直在增加,最后读到文件结尾就变成了-1,所以最后一次打印b为 -1 至于 out.write(buf, 0, b) 我感觉不太对,0 b 分别代表什么意思呢,
2016-07-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于while((b=in.read(by,0,by.length))!=-1),这个这的返回值是怎么回事?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信