c++的I/O(vc版)(一)

C++的I/O(vc版)(四) 下面进行我们的第二大类,流缓冲类。stream并不负责写或者读,毕竟如它原本的目的一样:负责格式化,存储格式化信息;当然我们还用它存储状态信息等等。stream把它的读写工作转交给stream buffer,即缓冲区类。 缓冲区类主要是围绕着位置展开操作,下面先介绍一个与位置有关的类: /*fpos:它可以存储还原任何流中的任意文件的位置指示器所需的所有信息 * 对象的类 fpos 阅读详情

   c++的I/O是我们最常用的库之一,也是操作复杂,功能复杂的类库之一。

 在C++的程序中,很少有不用I/O的程序,但是,对于我来说,I/O我却用的出奇的差,只会几个简单的函数,尽管够用,但是却用的效率奇低,于是,在此学习c++ I/O类库的使用方法。


首先是I/O中流的概念,c++的I/O中的所有的操作都是基于流。

流i/o:要传递的数据是无结构的字节流,字符流或者任意同等大小单位的数据流,c++中的流是字符流,流中不包含关于数据结构的任何信息,注意是字符流,而非字节流或者位流。

i/o流的数据表达方式:

内部表示(在程序中):各种便于程序处理的数据类型

外部表示(屏幕,通信通道,存储设备。。。):文本i/o和二进制i/o;如果外部数据表示为可读的字符序列,我们成为文本i/o,所有不可读的外部表示都成为二进制i/o;标准i/o流的目的是支持文本i/o,不直接支持二进制i/o;

在外部我们的是无结构的字符,然而程序内部,我们需要的是有结构的数据类型如int,float等等。

c++关于内外部的转化,设计了两层:格式化层和传递层。

首先我们来看一下,输入输出都需要哪些步骤:

1.格式化或解析:在用字节表示的内部数据与采用字符序列表示的外部数据之间的双向转化
2.缓冲:用于在格式化/解析与传递数据之间的缓存字符序列。
 对于输出,较短的字符序列格式化后并不马上传递,而是保存在缓冲区,待累加到一个大数据块再传递到外部设备;
 对于输入,从外部设备读入的大量数据也是先放到缓冲区
3.编码转换:将一种字符表达式转换为另一种表达式,例如多字节字符与单字节字符的转换
4.传递。


好,再回到我们说的c++中的两层:其中,格式化层负责进行格式化或者解析,传递层负责缓冲,编码转换和传递。

于是我们有了分工明确却又相互联合的两个类的概念----格式化类和传递类。后面我们发现格式化类就是流类,传递类就是流缓冲类。

至此,我们的背景知识就分析完了,下面开始C++I/O的学习。

c++的I/O体系:

首先是基本的流类体系:

然后是文件流类体系:

最后是string流类体系:



c++builder调用VC的dll以及VC调用c++builder的dll 解析__cdecl,__fastcall, __stdcall 的不同:在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。 比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,其它两个可以看MSDN,不过这个对我们编程没有太大的作用 ------------------------------------------ 阅读详情

相关推荐

使你的C/C++代码支持Unicode

使你的C/C++代码支持Unicode

jhfyuf的博客 4680

C++的I/O(vc版)(二)

根据流类体系,我们可以看出基本的流类是ios_base和basic_ios  首先是ios_base是流类始祖,先分析ios_base,ios_base中储存的是不依赖于读写的数据的类型的基本信息,如格式化信息、异常状态、事件回调函数等。 首先看一下数据成员: iostate _mystate;//stream state iostate _except_;//except

wangyanphp的专栏 945

VC/C++实现TXT到DAT文件转换的源代码

本文还有配套的精品资源,点击获取 简介:在IT行业中,文件格式转换是一个常见任务,特别是在文本数据处理方面。本文详细介绍了如何通过VC/C++编程语言实现从TXT文本文件到DAT数据文件的转换。此转换流程包括读取TXT文件内容、数据预处理、创建并写入DAT文件等步骤。在VC/MFC环境中,还可以利用MFC库简化文件操作,并创建图形用户界面。 1. 文件格式转换基础...

weixin_35649491的博客 1314

Linux C\C++方式下的文件I/O编程

在旧头文件里的fstream.h,如果使用ifstreamfile的默认参数声明一个输入文件流,当这个要读的file文件不存在时,会自动创建一个空文件,从而给判断文件是否存在造成了很多麻烦。因为C++兼容C,所以C中的输入输出函数依然可以在C++中使用,但是很显然,直接把C的那套输入输出搬到C++中肯定无法满足C++的需求,更重要的一点是,C中的输入输出有类型要求,只支持基本类型,因此C++设计了易于使用的并且多种输入输出流接口统一的I/O类库,并且支持多种格式化操作,还可以自定义格式化操作。

夏天又到了的专栏 3182

高效处理大文件的重叠I/O VC++源代码解析

OVERLAPPED结构体是Windows平台上用于处理异步I/O请求的一种数据结构。它允许应用程序在文件操作(如读取和写入)进行的同时,继续执行其他任务。在本章节中,我们详细讨论了OVERLAPPED结构体的介绍、在重叠I/O中的应用,以及处理超大文件和错误管理的高级技巧。在Windows平台开发中,合理利用OVERLAPPED结构体能够有效提升应用程序的性能和效率。在接下来的章节中,我们将继续探讨如何在VC++中实现重叠I/O,以及WinAPI中CreateFileReadFile。

weixin_33193177的博客 769

auto.js梦幻西游游戏脚本,梦幻西游脚本开发思路

本篇文章给大家谈谈梦幻西游脚本用什么语言写,以及auto.js梦幻西游游戏脚本,希望对各位有所帮助,不要忘了收藏本站喔。

npy199331的博客 1939

C++的I/O(vc版)(六)

首先回忆一下,我们已经分析过的类:基本的流类完成:流状态信息,格式化信息,其中一些不能用掩码表示,需要特定的数据成员,locale对象,流缓冲类指针,耦合的ostream;基本的流缓冲类完成:六个指针的存储。 这个我们分析的是basic_ostream  首先是类中会用到的类型声明: typedef basic_ostream _Myt; typedef basic_ios _Myios

wangyanphp的专栏 1678

基于FFT的阵列方向图快速计算公式推导

因为自己毕设涉及到阵列方向图综合相关知识,最近阅读了关于方向图综合的相关文献,就其中关于使用FFT计算阵列方向图的方法进行了公式推导。 简介: 自从1965年Colley-Tukey发表快速傅里叶变换[1]论文以来,FFT在许多科学技术领域获得了广泛和成功的应用。在阵列信号处理与雷达信号处理领域,随着科技的发展,对于电尺寸较大的相控阵天线,使用公式按照级数求和计算天线阵列方向图的方法效率甚低,...

qq_38151438的博客 4290

C++的I/O(vc版)(三)

前面已经分析完ios_base类了,现在来分析一下basic_ios //此处为了简洁,将许多别文件的定义搬到此文件 typedef int _Mbstatet; typedef fpos streampos; typedef streampos wstreampos; #define EOF (-1)//原本定义于stdio.h //下面是类char_traits的定义 //不同的字符集,不同

wangyanphp的专栏 1346

Winform使用TreeView控件实现带复选框的三态树

刚接触c#,项目中用到Treeview实现三态,即选中、未选中、半选中状态,并且要求父子节点选择联动,效果类似下图网上有很多例子,于是研究了一下,结合网上大佬们的例子,所以在这里记录一下。首先新建一个Winform工程拖个TreeView控件,然后运行。。。嗯。。。加点数据吧。private void CreateTree() { TreeNode anime = new TreeNode...

laoyezha的博客 2万+

Synopsys安装教程Ubuntu22.04版本

在Ubuntu22版本上安装Synopsys等系列工具,安装DC,VCS等等

qq_59529218的博客 5725

VC中C++的输入输出I/O 流函数

(1)什么是“流”?   C++中的“流”(stream)是一种抽象,它表示数据从源端流向目的端。   输入流(Input Stream)表示的是数据从输入设备(如键盘、磁盘等)流向内存,输出流(Output Stream)表示的是数据从内存流向输出设备(如屏幕、打印机、磁盘等)。输入输出流(I/O Stream)是输入流和输出流的合称。   “流”中的内容可以是任意形式的数据,例如:ASC

心在天涯 2180

2026年职业院校技能大赛中职移动应用与开发—数字生活APP原型设计参考答案(含素材)

本模块以产品原型为目标,考查参赛选手熟练收集、分析和归纳客户需求,清晰梳理业务流程,熟练使用UI设计软件进行产品UI/UE设计,掌握正确的UI配色方案,设计出符合业务逻辑的人体工学移动App 原型优秀作品。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 568

C++的I/O(vc版)(五)

具体的缓冲类有filebuf,stringbuf,由于filebuf的大部分工作都转交给了C流,不好分析,所以重点分析的还是stringbuf。  对于stringstream,我们最常用的语句就是: string s="1.2 5.6 7 7 "; istringstream is(s); float f; is >> f; 上述语句,给出了stringbuf的基本形式:以string初

wangyanphp的专栏 1239

部署与可视化系统:零基础到精通:LabVIEW 调用 YOLO 动态链接库(DLL)的保姆级视觉检测系统融合实战

LabVIEW与YOLO26深度集成:工业视觉检测新范式 本文揭示了LabVIEW与最新YOLO26模型深度集成的创新方案,通过C++封装ONNX Runtime为DLL,在LabVIEW中实现端到端视觉检测。核心突破点包括: 技术选型:对比YOLOv5/YOLOv8/YOLO26性能,YOLO26在CPU推理速度提升43%,支持NMS-Free端到端推理 部署架构:提供ONNX Runtime C++ API和TensorRT两种DLL封装路径,适配不同硬件环境 工程实现:详细展示从PyTorch模型导出

ZXSXJ的博客 282

JavaFX Stage

JavaFXStagejavafx.stage.Stage表示 JavaFX 桌面应用程序中的窗口。在 JavaFX 内部,Stage您可以插入一个 JavaFX Scene,它表示在窗口内显示的内容 - 在Stage.当 JavaFX 应用程序启动时,它会创建一个根Stage对象,该对象将传递给 start(Stage primaryStage)JavaFX 应用程序的根类的方法。此Stage 对象代表 JavaFX 应用程序的主窗口。

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 508

C++的I/O(vc版)(七)

首先,我们还有很多的类没有分析:istream,filestream,filebuf,还有对应得迭代器。第二,即使前面的分析也不能说明I/O的使用规范。如果想要熟练的使用I/O,建议读《C++标准程序库》,那是一本经典。第三,流的格式化读取和输出大部分依靠的是locale,而我们前面很少涉及,现在还看不懂源码,只能以后分析了。  下面摘抄《c++标准程序库》中关于如何自定义I/O操作符的说明。

wangyanphp的专栏 912

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++打造局域网聊天室第八课: 异步I/O模型及多线程

C++打造局域网聊天室第八课: 异步I/O模型及多线程

qq_59940419的博客 1506

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ACE学习笔记(一)--I/O事件多路分离

  由于开博时这本电子书已经看了不少了,所以就不从新写了。这本电子书总体来说不错,毕竟是马维达的作品,但是有不少错误,而且不是针对入门的,向我这种刚刚转向C++的,啃起来十分困难。硬着头皮啃吧 在这本书中,有一段讲I/O事件多路分离的问题的源码,照样敲入后和我想象的结果不一样,源码如下:下边的程序在VC已经编译通过,用的是ACE5.4,运行该服务时,我通过telnet向该服务端口发字符串

1510

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

如何在Visual Studio中新建MB-System的I/O模块

实现了在windows平台下使用Microsoft Visual Studio Community 2022 (64 位)构建MB-system的I/O模块项目,用于将国产声呐数据添加到MB-system的数据支持中去。

qq_21472607的博客 1272

socket网络通信(重叠I/O方式实现)包含4种方式

采用重叠I/O方式实现的socket网络编程,异步非阻塞方式,代码效率比阻塞式的socket编程方式高。实现了TCP server,TCP client,UDP server,UDP client,四种方式可选,可以使用在各种场合用于监控网络数据。本程序只支持单客户端和服务端的应用场合。代码封装成库形式,非常方便移植。平台使用的是VC6.0,语言用的是C++,MFC做的界面。使用ws2_32....

hill_guo的博客 824

一、VC是什么?学VC是学什么?

首先VC是一个软件(IDE集成开发环境)(编译、编辑、调试) C和C++。但C++中的有些特性是不用的,例如I/O流,多态继承 WindowsSDK(软件开发工具) VC的灵魂:MFC(微软基础类库) ATL(ActiveX模板类库) 其他的SDK,如OpenGL,DirectX,ActiveMoive,DrawDib(WinG) VC是许许多多技术的综合,就好象少林72般绝技,一般在应用中学会其

smail_flyer的专栏 1535

基于函数的I/O操作(头文件stdio.h)

基于函数库的I/O是C语言标准库的功能,基于系统级I/O函数实现。 系统级I/O函数对文件的标识是文件描述符,C语言标准库中对文件的标识是指向FILE结构的指针。在头文件cstdio或stdio.h中声明了FILE结构,并对其他与标准I/O有关的常量、数据结构、函数等进行了定义。 文件是用一个指向特定结构的指针来标识的,这个特定结构就是FILE结构,它描述了包含文件描述符在内的一...

380

File I/O 效率 C vs C++ (一)

继续关注文件读写...这次测试写的效率<br />其实关于这个问题的讨论似乎总会以类似语言信仰问题而告终,再加 C++ IO 库的复杂性,很多半调子 C++ 程序员总会出现各种误用,反过来却作为攻击 C++ IO 效率低的凭证。<br />比如经常有人边在输出时大量使用类似<br />    fout<<...<<endl;<br />的语句边嚷嚷着写文件速度超慢的,只能说这些人根本不知道自己写的句子都做了什么... 所以说在评价任何东西之前先要做到最起码的了解<br />咱也算是大致研究过 C++ IO

vanwaals的专栏 1224

C++输入和输出

C++中的输入和输出主要通过标准库中的iostream类实现。使用cin对象从标准输入(如键盘)读取数据,使用cout对象将数据写入标准输出(如屏幕)。

qq_74013365的博客 5559
上一篇: (-):wav文件转化为txt文件
下一篇: C++的I/O(vc版)(二)
wangyanphp
博客等级 码龄14年 90粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值