关于read的读取机制,为什么.read配合循环while(ture)  就能依次按顺序读取,而不是无限循环第一段的1024字节的内容呢?感谢!!比如一个文档里有 1025个字节,第一次循环会取1024个字节写入写出进新文档,那为什么第二次循环的时候 他会从1025开始读1个字节进去,而不是从第一个字节重新开始读呢。谢谢

解决方案 »

  1.   

    read是只要有就会继续读下去,读取的b字节数组,读取总长度为1024,直到读完为止,返回-1,然后跳出,第二次从1025开始是因为如果文件没读完,read会记录上次的记录,每次从上次读完的地方后面开始,直到整个文件读完或者出现异常
      

  2.   

    read的时候回返回一个int的值.这个值是你读取的长度
      

  3.   

    一楼说的比较好,我也说一下我的看法:
    1.在你的程序执行语句:fis = new FileInputStream("F:\\javadraft\\from.txt");后,在内存空间和文件之间就已经建立了数据传输管道;
    2.在第一次循环之前,read()方法中有一个记录指针,它的指向是文件字节数据中角标为0的字节数据的前一个字节数据的地址,但是读取字节数据时,它是从角标为0的字节数据开始的;
    3.第一次循环之后,read()方法将文件字节数据中角标为0~1023的字节数据读入到了字节数组中,同时将记录指针进行重新指向,即指向了角标为1023的字节数据;
    4.第二次循环时,read()方法读取文件字节数据从角标为1024的字节数据开始的,但是此字节数据为该文件的最后一个.故,在此字节数据之后,读到文件结尾,返回-1.
    总之,read()方法中有一个记录文件读取位置的指针,每次读取文件时该指针都会发生相应的变化.
    ps:个人看法,有不周之处,希望能指出.