问答详情
源自:-

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

这种不同的返回值是怎么出现的呢?源码里面的判断么?

提问者:Rain_sudo 2015-10-30 16:58

个回答

  • leaf_xiao
    2015-11-09 15:38:09

    read() 返回的是 读入缓存的总字节数;如果因为已到达流末尾而不再有数据可用,则返回 -1。

    返回 100,说明已经读取了100个字节数到缓存数组中;

    返回-1,说明已经读取到了流末尾,没有数据可读了。

    上面代码,第一次已经一次性把流内的字节读完了,所以后面都是返回-1。

  • Rain_sudo
    2015-11-01 13:28:51

    其中一段是这样的~

  • Rain_sudo
    2015-11-01 13:28:18

    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();}

  • Rain_sudo
    2015-10-30 21:13:39

    完整的和老师演示的是一样的,我就是把bytes单独提出来让它赋值 in.read(buf, 0, buf.length),然后出现上面的额结果

  • Leiky灬
    2015-10-30 19:36:45

    完整代码来一发