第 8 章 IO库

第 8 章 IO库

标签: C++Primer 学习记录 IO库



8.1 IO类

  1. IO对象无拷贝或赋值,因此不能将形参或返回类型设置为流类型,进行 IO操作的函数通常以引用方式传递和返回流。又因为读写一个流会改变其状态,所以不能是 const引用!
  2. IO操作因为需要频繁地与外部设备进行数据传递,很容易出错。IO库中设置了一些函数和标志来操纵流的条件状态。
  • badbit,不可恢复的错误
  • failbit,可恢复的错误
  • 到达文件结束位置,eofbit和 failbit都会被置位。
  1. 由于设备的写操作可能很耗时,所以操作系统会将多个输出操作合为单一的系统级写操作,即缓冲机制。
  2. 导致缓冲刷新的原因有很多:
  • 程序正常结束,作为 main函数的 return操作的一部分,缓冲刷新被执行。
  • 缓冲区满时,需要刷新缓冲,而后新的数据才能继续写入缓冲区。
  • 操纵符显式刷新。
    • endl,完成换行并刷新缓冲区
    • flush,刷新缓冲区,但不输出任何额外的字符
    • ends,插入一个空字符,然后刷新缓冲区
  • 使用 unitbuf设置流的内部状态,告诉流在接下来的每次操作之后都进行一次 flush操作,而 nounitbuf则重置流,使其恢复正常的系统管理的缓冲区刷新机制。 cout << unitbuf; // 所有输出操作后都会立即刷新缓冲区 cout << nounitbuf; // 回到正常的缓冲方式
  • 关联输入和输出流。标准库中, 是将 cin关联到 cout上的,任何试图从输入流读取数据的操作都会先刷新关联的输出流。对于交互式系统,这意味着用户提示信息会在读操作之前被打印出来。

8.2 文件输入输出

  1. 在操作文件流对象之前,进行 open是否成功的检测通常是一个好习惯。 // 检测 open是否成功 if (out) { }
  2. 读入和写出的文件,默认是与 cpp/h代码文件在同一路径下的。
  3. 当一个 fstream对象离开其作用域时, close会被自动调用,与之关联的文件会自动关闭。
  4. 未指定文件模式时, ifstream默认以 in模式打开,ofstream默认以 out模式打开,fstream默认以 in和 out模式打开。
  5. 默认情况下,以 out模式打开文件,就同时也意味着 trunc模式,已有数据会被截断。如果要保存已有数据,需要在打开文件时同时指定 app模式(定位到文件末尾)。

8.1 string流

  1. 当我们的某些工作是对整行文本进行处理,而其他一些工作是处理行内的单词时,通常可以使用 istringstream。同样的,而当需要频繁地文件输出操作或在输出字符串前还要进行某些操作时,可以先将输出内容写入到一个 ostringstream中,然后一次性输出。
  2. stringstream流就是一个string流的缓冲机制,有点类似于 vector<string>,只是 stringstream流本身是一个流,支持流的输入和输出操作。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

goroutine背后的系统知识

Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流...

3524
来自专栏IMWeb前端团队

RESTful API 规范 v1.0

本文作者:IMWeb 梁伟盛 原文出处:IMWeb社区 未经同意,禁止转载 RESTful API 规范 v1.0 [toc] URI URI规范 不...

2937
来自专栏算法修养

服务器推技术研究Comet

服务器推技术 最近参与的一个关于股票的项目,有这样一个需求。服务器需要主动推送给客户端消息。这和传统的Web模式不同。传统的Web系统,客户端和服务器的交互是这...

3468
来自专栏智能算法

Python学习(九)---- python中的线程

原文地址: https://blog.csdn.net/fgf00/article/details/52773459 编辑:智能算法,欢迎关注! 上期我们一起学...

1672
来自专栏C/C++基础

Linux命令(9)——tcpdump命令

tcpdump是一款类Unix/Linux环境下的抓包工具,允许用户截获和显示发送或收到的网络数据包。tcpdump 是一个在BSD许可证下发布的自由软件。

1423
来自专栏代码世界

Python之进程

进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机...

6617
来自专栏张戈的专栏

Linux运维工程师:30道面试题整理

前段时间,我在准备面试的时搜到的一套 Linux 运维工程师面试题,感觉比较全面,一直保存在草稿,刚在整理后台时翻了出来,干脆就发出来好了,以备不时之需。 1....

2K5
来自专栏技术小讲堂

RESTful API的十个最佳实践1. 使用名词而不是动词 2. Get方法和查询参数不应该改变资源状态3. 使用名词的复数形式 4. 为关系使用子资源 5. 使用HTTP头决定序列化格式 6. 使

WebAPI在过去几年里非常的盛行,我们很多以往的技术手段都慢慢的转换为使用WebAPI来开发,因为它的语法简单规范化,以及轻量级等特点,这种方式收到了广泛的推...

5755
来自专栏Java帮帮-微信公众号-技术文章全总结

Python常见面试题【悟空教程】

1.MySQL 数据库总结 MySQL 可以建多少个数据库,理论上是没有限制的,每一个数据库可以有上亿的对象,但是一般基于硬件要求、效率问题一般不超过64个, ...

1882
来自专栏张善友的专栏

.net 2.0 你是如何使用事务处理?

     事务处理作为企业级开发必备的基础设施, .net 2.0通过System.Transactions对事务提供强大的支持.你还是在使用.net 1.x下...

2216

扫码关注云+社区

领取腾讯云代金券