缓冲区和流之间是什么样的关系啊?请高手进来总结一下io的整个过程,我分不多,不好意思!

qlampskyface 2003-11-20 01:27:09
建立输出流,write,流进入缓冲区,另一端读取流(read),冲洗(flush)缓冲区,然后再进行下一次的循环。完成以后关闭流。是这个样子吗?
不过为什么缓冲区还要有最小进入字节数的限制呢?达不到这个数目或者不进行flush,就写不进缓冲区去,写不进的话另一端就读不到。
我说得对吗?
...全文
32 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Shrewdcat 2003-11-21
楼上的意思,就是缓冲区大小确定后,只有数据添满,才会提交出去。在未满前,可以用flush函数强制缓冲区数据提交。
这样做靠牺牲内存空间,或者带宽的高效率。

缓冲区空间可以自己指定,系统也有缺省值,在用户未指定时。

JB9 help文件有一句: The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.

  • 打赏
  • 举报
回复
xiaozuidazhi 2003-11-21
是这样,我在一篇文章里看到这么一段,我看不懂,请帮忙解释一下。


比如,假设已经写入了一个300字节的请求给一个服务器,通常希望在发送更多数据之间等待响应。但是,如果输出流有一个1024字节的缓冲区,则该流可能在数据发送出缓冲区之前正在等待更多的数据到达,但是这些数据是不会到达的,因为他们还没有发送出去!缓冲流不会发送数据给服务器,除非它从地层流获得了更多的数据,但是底层流是不会发送更多的数据,除非它从服务器获得了数据,而服务器不发送数据,除非它获得保存在缓冲中的数据!这就是矛盾!flush()方法可以解除这个僵局,因为即使缓冲区没满,它也强制要求实行缓冲操作的流传送数据!
  • 打赏
  • 举报
回复
路人丁 2003-11-20
你想干什么?你要干什么?
  • 打赏
  • 举报
回复
littlecong 2003-11-20
设缓冲区是为了提高效率,通常只须在最后关闭前flush就可以了

不过为什么缓冲区还要有最小进入字节数的限制呢
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我不明白你是什么意思,好像没有这个限制
  • 打赏
  • 举报
回复
qlampskyface 2003-11-20
怎么没有人回答呢?嫌我给的分少吗?我不是故意的啊。
  • 打赏
  • 举报
回复
发帖
Java SE

6.2w+

社区成员

Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
帖子事件
创建了帖子
2003-11-20 01:27
社区公告
暂无公告