关于流与缓冲区的问题

anewjavaboy 2004-10-19 10:54:10
当使用缓冲区的时候,数据是先进入流再进入缓冲区,还是先进入缓冲区再进入流?

举例来说,当用户从键盘键入数据的时候,字节是先进入标准输入流再进入缓冲区,还是先进入缓冲区再进入标准输入流?书上说,建立了缓冲区,read()方法将直接从缓冲区读取数据,那麽字节是先进入标准输入流再进入缓冲区了?

也就是说,使用缓冲区的时候,数据是先进入流再进入缓冲区,对吗?

有没有这种可能,当使用了缓冲区,应用程序急需数据,而此时缓冲区为空,须将数据从输入流中读入
缓冲区才行,而程序等不及,就不经过缓冲区,而直接从输入流中读取数据,这可能吗?还是说,只要使用了缓冲区,就必须从缓冲区中读取数据,流被封闭了?
...全文
63 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChDw 2004-10-19
  • 打赏
  • 举报
回复
对于输入流:
当程序请求从Buffered流中读取数据时,这个Buffered流先从缓冲区中读取(开始的时候这个缓冲区是空的,它也不是自动从输入流中读取出来的),如果Buffered流发现从缓冲区中已经无法读取出数据了,则它从输入流中一次性读取一大段数据回来到缓冲区。Buffered流返回程序所需要的长度的数据,剩下的数据还是留在缓冲区中等待程序下次读取

对于输出流:
程序写数据时,Buffered流先将这些数据写到缓冲区中,当这个缓冲区已经满了或者程序调用了flush方法时,才一次性的将数据写入真正的流中



这个Buffered是为了减少从真正数据流中读取的次数的。


“有没有这种可能,当使用了缓冲区,应用程序急需数据,而此时缓冲区为空,须将数据从输入流中读入缓冲区才行,而程序等不及,就不经过缓冲区,而直接从输入流中读取数据,这可能吗?还是说,只要使用了缓冲区,就必须从缓冲区中读取数据,流被封闭了?”

这个理解是不对的,程序是始终请求从Buffered流中读取数据的,这个Buffered流如果发现从缓冲区中已经有足够数据了,则可以直接返回;如果发现缓冲区数据不够了,则自动的从真正的输入流中读取足够的数据,直到满足程序的要求为止

81,094

社区成员

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

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