【STL】iostream 编程:输入/输出替换选项
本文介绍一下输入/输出替换选项的几种方法。目录1 输入输出的可选方案2 Windows 下流对象的兼容性问题3 方案选型列表4 总结1 输入输出的可选方案微软 C编译器提供了多种 I/O 编程方案C运行时库无缓冲直接 I/O头文件 io.hAPI_open_read_write_close没有缓冲区调用一次就直接调用操作系统内核接口适合底层硬件读写、二进制大块数据优点控制粒度极强缺点频繁调用会产生大量系统调用性能差ANSI C标准库流式 I/O stdioFILE*、fopen、fprintf、fread、fwrite自带用户层缓冲区减少系统调用支持格式化文本输出纯 C 过程式写法没有面向对象封装没有类型安全控制台与串口的硬件直写 I/O直接调用 Windows 控制台 API、串口API绕过标准库多用于工控程序、串口通信、控制台高级颜色与光标控制MFC 微软基础类库CFile、CStdioFile封装了文件读写自带窗口消息环境只适用于 MFC 项目C标准库 iostreamcin / cout / ifstream / ostringstream带缓冲的格式化文本读写日常日志、文本文件不依赖 MFC 时作为纯 C 的二进制读写方案面向对象封装运算符重载支持自定义对象直接输出iostream 类适合带缓冲的格式化文本读写。如果想要纯 C接口且不使用 MFC它也可以处理无缓冲 I/O 与二进制文件读写。作为面向对象方案它可以完全替代 C语言运行时 I/O 函数。在 Windows 平台使用 iostream 时字符串流与文件流不受任何限制。但字符控制台流 cin、cout、cerr、clog 和 Windows 图形界面程序不兼容。开发者也可以派生自定义流类直接对接 Windows 系统环境。2 Windows 下流对象的兼容性问题文件流 ifstream / ofstream、字符串流 stringstream完全独立只操作内存与磁盘文件不依赖控制台窗口控制台程序、GUI窗口程序都能正常使用没有任何限制全局控制台流cin、cout、cerr、clog这几个对象默认绑定控制台黑窗口Windows窗口 GUI项目Win32/MFC程序本身没有控制台窗口此时调用 cout 输出内容无处打印会出现输出失效、卡死、输出丢失问题3 方案选型列表方案特点适用项目原生无缓冲 I/O底层、无缓冲硬件读写、大块二进制C stdio简洁、带缓冲、格式化跨平台 C 程序iostream面向对象、类型安全、支持自定义对象纯 C 项目不使用 MFCMFC CFile集成窗口框架MFC 窗口程序Windows 原生 API深度控制系统设备GUI、串口、控制台高级控制4 总结MSVC 一共提供5套 IO 体系覆盖从底层内核调用到高层面向对象封装iostream 是带缓冲的面向对象 IO 库既能处理文本也能处理二进制用来代替 C stdioWindows GUI 程序不能直接使用 cout/cin但文件流与内存字符串流不受影响想要把流输出写到窗口控件可以继承流缓冲区自定义实现 Windows 版本的流