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

来源:4-3 字节流之文件输出流FileOutputStream

慕工程2957023

2016-06-29 17:03

如果说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回答

  • XhstormR
    2016-09-15 10:13:45

    读完了就返回 -1。

  • FateForever
    2016-07-03 21:34:51

    out.write(buf,0,b);

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


  • 飞扬拽拽
    2016-06-29 17:24:21

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

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

    染红_街道 回复慕工程295...

    如果文件特别大你一次读不完呢,这就是例如每次读取100个字节,然后写入,再读100个字节

    2016-07-03 10:48:49

    共 2 条回复 >

  • 慕工程2957023
    2016-06-29 17:12:27

    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?


    染红_街道

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

    2016-07-03 10:52:33

    共 1 条回复 >

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133754 学习 · 1030 问题

查看课程

相似问题