小白请教下Java里 FileInputStream.read读取机制的问题。

W406990194 2017-11-25 05:28:33
关于read的读取机制,为什么.read配合循环while(ture) 就能依次按顺序读取,而不是无限循环第一段的1024字节的内容呢?感谢!!



比如一个文档里有 1025个字节,第一次循环会取1024个字节写入写出进新文档,那为什么第二次循环的时候 他会从1025开始读1个字节进去,而不是从第一个字节重新开始读呢。谢谢
...全文
549 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzy562498146 2017-11-27
  • 打赏
  • 举报
回复
一楼正解
_小小咔啦咪 2017-11-27
  • 打赏
  • 举报
回复
一楼说的比较好,我也说一下我的看法: 1.在你的程序执行语句:fis = new FileInputStream("F:\\javadraft\\from.txt");后,在内存空间和文件之间就已经建立了数据传输管道; 2.在第一次循环之前,read()方法中有一个记录指针,它的指向是文件字节数据中角标为0的字节数据的前一个字节数据的地址,但是读取字节数据时,它是从角标为0的字节数据开始的; 3.第一次循环之后,read()方法将文件字节数据中角标为0~1023的字节数据读入到了字节数组中,同时将记录指针进行重新指向,即指向了角标为1023的字节数据; 4.第二次循环时,read()方法读取文件字节数据从角标为1024的字节数据开始的,但是此字节数据为该文件的最后一个.故,在此字节数据之后,读到文件结尾,返回-1. 总之,read()方法中有一个记录文件读取位置的指针,每次读取文件时该指针都会发生相应的变化. ps:个人看法,有不周之处,希望能指出.
「已注销」 2017-11-27
  • 打赏
  • 举报
回复
read的时候回返回一个int的值.这个值是你读取的长度
天之上有什么 2017-11-26
  • 打赏
  • 举报
回复
read是只要有就会继续读下去,读取的b字节数组,读取总长度为1024,直到读完为止,返回-1,然后跳出,第二次从1025开始是因为如果文件没读完,read会记录上次的记录,每次从上次读完的地方后面开始,直到整个文件读完或者出现异常
conquer0715 2017-11-26
  • 打赏
  • 举报
回复
内部维护一个游标,每当你调用一次后游标就自动指向下一个字节处,所以当再次读取的时候就得到下一个字节数据。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧