利用C++文件流进行数据块的读写

来源:互联网 发布:microsoft网络是什么 编辑:程序博客网 时间:2024/06/02 23:40

科研项目上遇到一个文件流的读写问题,要把一个图片像素大小(1392*1038)的矩阵(double型)数据写入磁盘,一开始是用ofstream将数据逐个写入txt文件中,这样做的结果就是写出的文件太大,不利于存储和转移,而且读写速度奇慢,很影响后续工作的速度。还好最近看了leveldb的源码,知道用ofstream的read、write函数将内存中的一块数据与磁盘进行读写。尝试了下,速度和文件的大小都大大改善。
打开文件的方式在ios类(所以流式I/O的基类)中定义,有如下几种方式:

  1. ios::in 为输入(读)而打开文件
  2. ios::out 为输出(写)而打开文件
  3. ios::ate 初始位置:文件尾
  4. ios::app 所有输出附加在文件末尾
  5. ios::trunc 如果文件已存在则先删除该文件
  6. 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_TH1.read((char*)h1,buffsize);
0 0
原创粉丝点击