Я пытаюсь прочитать большой файл в x, y, z. Как правило, это сталкивается с ГБС данных.
Я создал файл отображения памяти с помощью Boost. Тем не менее, я до сих пор не очень ясно, как получить доступ к фрагменту памяти из этого файла.
Boost предоставляет функцию char * data (), которая возвращает указатель на первый байт буфера. (Я получаю все данные в виде буфера).
Есть ли способ, которым я могу читать порцию данных по порции. В идеале я хотел бы прочитать данные кусками, скажем, 10000.
Ниже приведен код.
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;
boost :: iostreams ведут себя так же, как std :: basic_iostream
Мы можем использовать неотформатированный IO
char buff[10000];
file.read(buff,10000);
Других решений пока нет …