| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1771 人关注过本帖
标题:关于字符串文件缓冲区的问题
只看楼主 加入收藏
tianxiao110
Rank: 1
等 级:新手上路
帖 子:63
专家分:1
注 册:2010-7-23
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:8 
关于字符串文件缓冲区的问题
我刚学C++,对字符串文件缓冲区这块,很迷惑。希望哥哥姐姐们能帮帮我。
我很笨的,最好能用通俗,易懂……的语言。呵呵。
(1)什么是缓冲区,有什么用途。
(2)缓冲区刷新一次后,所关联的文件夹有什么变化吗?
(3)缓冲区满了后会自动刷新吗?
呵呵,我也不知道该怎么问,反正就是挺迷惑,别绕道,帮帮我呗。
搜索更多相关主题的帖子: 缓冲区 字符 文件 
2010-08-08 11:35
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:6 
这个问题,我来侃两句:对不对的就无从考证了啊。纯属瞎侃

你家门前有座山,
山上有条如‘指’宽的瀑布。
你就靠这条瀑布解决饮水问题,
什莫时候渴了就能喝到水;
本来一切挺美好。

直到有一天,
由于连年大旱,
瀑布的水流突然减少到‘点滴’的程度。

这该咋办呢????
你渴的两眼冒火,却只能润润喉咙。
聪明的你立马想到一招。。。。
砌个‘水池子’-----
蓄水。

蓄满了水喝,那多过瘾啊。

好,我要说‘缓冲区’就是水池子的概念。
CPU的速度是很快的,外部IO的速度是很慢的。
CPU于是就要等待。
于是就有了缓冲区的概念。
在‘蓄水’(IO)其间,CPU干别的事情。
IO完成,CPU一次处理。
如此往复,效率提高很多。

当然,水池子不满,你也可以‘喝’啊。
这毕竟是你的自由。
这就是强制'刷新'的概念。

至于水池子满了该怎末处理,
取决于建水池子是你怎末设计了。
你可以设计一个水位检测仪,
当水满的时候自动将水放掉(刷新,不过这种方法有点二)。
也可以设计一个报警系统,
当水满了通知你(比较聪明)。








举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-08 17:55
tianxiao110
Rank: 1
等 级:新手上路
帖 子:63
专家分:1
注 册:2010-7-23
收藏
得分:0 
回复 2楼 东海一鱼
,你太有才了,谢谢,呵呵。
着实通俗易懂,我这么笨,都听懂了。呵呵。
,请你吃西瓜。呵呵
2010-08-08 18:23
tianxiao110
Rank: 1
等 级:新手上路
帖 子:63
专家分:1
注 册:2010-7-23
收藏
得分:0 
假如这十个表情是在内存的数据:
假如缓冲区只有俩个表情的空间:()()
假如用含有6次的循环从内存向缓冲区传输(每次一个表情)(全部运行完后): (关联文件里存的内容是这种结果呢?)
                                                                         (还是这种结果呢?)
                                                                         (还是这种结果呢?)
                                                                         (还是这种结果呢?)


[ 本帖最后由 tianxiao110 于 2010-8-8 19:00 编辑 ]
2010-08-08 18:47
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:4 
缓冲区就在内存里,一般是为了缓冲硬盘上的数据。

缓冲区的用途说的很明白了,因为往硬盘里一次写一块,和一次写一个字符,速度是没什么太大的差别。但不管怎么写,速度都比内存要慢几个数量级。所以为了提高 CPU 的吞吐能力,减少它的等待时间。就不写到硬盘中,而是先写到内存里。为了这个目的而使用的内存区间,叫缓冲区。

刷缓冲区的意思就是强制写回设备,硬盘呀,USB 呀都有可能。如果缓冲区满了也会自动刷,这也没什么好的报警机制,就是往内存里写的时候,系统可以侦测缓冲区。
方法差不多是这样,比如假设缓冲区的大小是 1024 个字节
for (;*p != '\0' && p < buf+1024; p++) { ... }
if (p == buf+1024) flush();
这样就行了。
另外程序结束,文件关闭,设备弹出等动作都会触发刷新。

你那个表情的问题太“形像”了,我一时还没搞明白。但肯定写到设备里的顺序和你想像的一样,要是写反了,那谁还敢用缓冲。
2010-08-09 00:35
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
看来,砌‘水池子’的重要性大家都明白啊。

4楼的,你的前面的3种现象哪,属于给‘山寨’砌‘水池子’的师傅砌的。属于严重违规呀

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-09 11:02
towhee
Rank: 2
来 自:石家庄火车站
等 级:论坛游民
威 望:1
帖 子:48
专家分:69
注 册:2010-8-8
收藏
得分:0 
很形象,很明白!
不过我问个另外的,那个刷新具体实现什么功能?会把缓冲区的数据删除?

最穷无非讨饭,不死终会出头
2010-08-09 11:50
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
不算删除,因为用不用缓冲,最終目的还是写回设备。刷回去了之后,缓冲区里的东西就没用了,删什么的倒不用。标记一下那些东西没用了就可以了,也回再写可以覆盖没用的。

还有一种缓冲区是读缓冲区,忘了说了。那个和写的有点区别,而且一般更复杂一点。不过楼主问的像是写缓冲,我就不多介绍了。缓冲是门学问,有人专门研究过相关的课题,有兴趣的话可以自己学学。
2010-08-09 12:26
towhee
Rank: 2
来 自:石家庄火车站
等 级:论坛游民
威 望:1
帖 子:48
专家分:69
注 册:2010-8-8
收藏
得分:0 
回复 8楼 pangding
非常感谢!

最穷无非讨饭,不死终会出头
2010-08-09 12:48
快速回复:关于字符串文件缓冲区的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030177 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved