首先什么是流,流是一个字节序列,而程序的输入输出就发生在流中。如果字节流是从设备(如键盘)流向内存,那么就叫他输入流。如果字节流从内存流向设备(如显示屏),那么就叫做输出流。所以在我们判断是否是输出流还是输入流,只需要看文件是否是流向内存,还是从内存流出。 一.在C++中常用的数据流类型1.标准设备的输入输出,即从键盘输入数据,输出到显示器屏幕上,这种输入输出简称标准I/O。 2.以外存的文件为对象进行输入输出,即从磁盘文件输入数据,数据输出到磁盘文件。这种输入输出简称文件I/O。 3.对内存中指定的空间进行输入输出。通常指定一个字符数组为存储空间。这种输入输出称为字符串输入输出,简称串I/O。 二.数据流中的缓冲区缓冲区又称为缓存,他是内存空间的一部分,因为cpu的速度很快,而外设等输出设备的速度很慢,为解决快速CPU和慢速输出输入设备的速度不匹配问题,我们设置输入输出缓冲区。其中缓冲区的执行过程,比如我们从磁盘里取数据,然后把读出数据放入缓冲区,计算机需要数据时直接从缓冲区读取,等到缓冲区的数据被CPU读取结束,然后再从磁盘读数据放缓冲区。这样就可以大大减少磁盘的读写次数,而CPU读取缓冲区的数据大大快于从磁盘中读取数据。这样缓冲区就可以加快计算机的运行速率。 缓冲区的类型缓冲区分为三种类型:全缓冲,行缓冲,和不带缓冲。 1.全缓冲:在这种情况下,当填满标准I/O缓存后才进行实际的I/O操作。全缓冲的典型代表就是磁盘文件的读写。 2.行缓冲:在这种情况下,当输入输出遇到换行符时,执行真正的I/O操作。这时我们输入的字符先存放在缓冲区,等按下回车键换行时才会进行实际的I/O操作,典型的代表就是键盘输入数据。 3.不带缓冲:不进行缓冲,典型代表是标准出错cerr/stderr。因为出错信息要直接显示出来,不要在进行缓冲。 刷新输出缓冲区输出缓冲区内容刷新的意思是:输出缓冲区的内容写到输出设备或文件中。 有以下几种情况刷新:
三.常用输入输出流类
流的状态
管理流的状态
流的通用操作常见问题文件游标
可以看出打印并不是我们预期输入的2 3 4 5 6,而文件中存入的确实是2 3 4 5 6但是打印的是6 6 6 6 6通过流的状态我们可以看出eof()和fail()标志位都被置1,而eof表示我们已经到达文件末尾了。所以这个程序的问题就是当我们输入数据时,文件的游标会跟随我们输入的一同移动一直指向最后一个位置。
|
原文地址:https://blog.csdn.net/qq_53243630/article/details/136804178
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://www.msipo.com/article-651103.html 如若内容造成侵权/违法违规/事实不符,请联系MSIPO邮箱:3448751423@qq.com进行投诉反馈,一经查实,立即删除!
Copyright © 2024, msipo.com