对BufferedInputStream的疑问

司青-已停止更新 2013-05-14 03:21:12
先给一个文件输入流添加缓冲功能:
FileInputStream fis = new FileInputStream("data");
BufferedInputStream bis = new BufferedInputStream(fis);

那么在第一次调用read()方法之前,BufferedInputStream类是已经将默认的8192字节大小的缓冲区填满了,还是当我们调用read方法后,这个类才将8192字节的buf填满?

是不是只有当缓冲区的数据已经空了的时候,BufferedInputStream类才会从"data"这个文件中一次性地读入8192字节的数据放到缓冲区呢?
...全文
134 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
静山晚风 2013-05-14
  • 打赏
  • 举报
回复
1楼正解sss
  • 打赏
  • 举报
回复
查看api文档你会发现,这个类有个成员变量buf。而且是个byte数组。预定义大小是2048.当读取数据时,BufferedInputStream会先将buf填满;当使用read()方法时,是先读取buf中的数据,而不是直接读取数据,当buf中的数据不足时,BufferedInputStream才会再从数据来源中提取数据。
rumlee 2013-05-14
  • 打赏
  • 举报
回复
1、第一次调用read的时候,才会去实际读取数据。 2、是的。你可以查看jdk源码就清楚了。

62,614

社区成员

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

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