2013-06-23 6 views
3

x, y, z로 큰 파일을 읽으려고합니다. 일반적으로 gbs의 데이터로 실행됩니다. 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

부스트 :: IOSTREAMS은 표준처럼 행동 :: basic_iostream 을 우리는 포맷되지 않은 IO

char buff[10000]; 
file.read(buff,10000); 
을 사용할 수 있습니다