2013-06-23 76 views
3

我正在嘗試讀取x,y,z中的大文件。通常情況下它會運行數據。 我使用Boost創建了內存映射文件。但是,我仍然不清楚如何從這個文件中訪問一塊內存。如何使用boost從內存映射文件訪問內存塊?

Boost提供函數char * data(),它返回指向緩衝區第一個字節的指針(我將整個數據作爲緩衝區)。
有沒有辦法通過塊來讀取數據塊。理想情況下,我想以10,000塊的形式讀取數據。

以下是代碼。

boost::iostreams::mapped_file_source file; 
std::string filename("MyFile.pts"); 
unsigned size = 58678952192; 
file.open(filename, size); 
int numBytes = size*sizeof(float)*3; 
cl_float3 *data = new cl_float3[size]; 
float * tmp = (float*)file.data(); 

for(int i = 0; i < size;i++)  
{ 
    data[i].x = tmp[i*3]; 
    data[i].y = tmp[i*3+1]; 
    data[i].z = tmp[i*3+2]; 
} 
delete[] tmp; 

回答

1

的boost :: iostream的表現就像標準:: basic_iostream 我們可以使用未格式化的IO

char buff[10000]; 
file.read(buff,10000);