利用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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章