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

科研项目上遇到一个文件流的读写问题,要把一个图片像素大小(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_T
H1.read((char*)h1,buffsize);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值