利用C++文件流进行数据块的读写
2015-07-14 10:42
309 查看
科研项目上遇到一个文件流的读写问题,要把一个图片像素大小(1392*1038)的矩阵(double型)数据写入磁盘,一开始是用ofstream将数据逐个写入txt文件中,这样做的结果就是写出的文件太大,不利于存储和转移,而且读写速度奇慢,很影响后续工作的速度。还好最近看了leveldb的源码,知道用ofstream的read、write函数将内存中的一块数据与磁盘进行读写。尝试了下,速度和文件的大小都大大改善。
打开文件的方式在ios类(所以流式I/O的基类)中定义,有如下几种方式:
ios::in 为输入(读)而打开文件
ios::out 为输出(写)而打开文件
ios::ate 初始位置:文件尾
ios::app 所有输出附加在文件末尾
ios::trunc 如果文件已存在则先删除该文件
ios::binary 二进制方式
具体的如果你要像我一样将内存中的一块数据写入磁盘,就要设置打开方式ios::binary,默认是ios::text;
读写时,记得将指向内存中数据块的指针转化为char*;
源码如下:
打开文件的方式在ios类(所以流式I/O的基类)中定义,有如下几种方式:
ios::in 为输入(读)而打开文件
ios::out 为输出(写)而打开文件
ios::ate 初始位置:文件尾
ios::app 所有输出附加在文件末尾
ios::trunc 如果文件已存在则先删除该文件
ios::binary 二进制方式
具体的如果你要像我一样将内存中的一块数据写入磁盘,就要设置打开方式ios::binary,默认是ios::text;
读写时,记得将指向内存中数据块的指针转化为char*;
源码如下:
__int64 buffsize = sizeof(double)*W_I_D_T_H*H_E_I_G_H_T; ifstream H1("./pd_bmp/pd_R_X_1.bin",ios::in|ios::binary); double *h1 = new double[W_I_D_T_H*H_E_I_G_H_T]; //图像尺寸W_I_D_T_H*H_E_I_G_H_T H1.read((char*)h1,buffsize);
相关文章推荐
- C++队列用法实例
- Jni中C++和Java的参数传递
- 与C语言不同,JAVA里没有无符号整型
- C++多线程(POSIX)
- 菜鸟学习-C语言函数参数传递详解-结构体与数组
- C语言中Static和Const关键字的的作用 -- 转
- GCC+宏及C++
- 1.将一个有序数组反转
- C++ 整型提升的规则
- C++判断矩形相交的方法
- MFC技术内幕系列之(五)---MFC文档序列化内幕
- MFC技术内幕系列之(四)---MFC消息映射与消息传递内幕
- MFC技术内幕系列之(三)----MFC执行期类型识别与动态创建技术内幕
- C++下用什么矩阵运算库比较好
- C++的global data的位置 及PE 文件中的section的内容
- MFC技术内幕系列之(一)---MFC应用程序“生死因果”内幕
- MFC的工具条和状态栏
- Jni 简单实战 获取c++返回值
- C++ 使用delete删除指针(1
- C++引用参数和引用返回值