В настоящее время я загружаю огромные объемы данных в память, чтобы быстро получить к ним доступ. До сих пор я помещаю все в оперативную память. Но теперь, когда мои данные становятся слишком большими, я больше не могу этого делать.
Поэтому я использую сопоставленный файл.
В этом файле я сохранил векторы «тональных меток» для аудиофайла.
struct udtPitchmark
{
int ByteStart;
int ByteCount;
};
struct udtAudioInfo
{
int ByteStart;
int ByteCount;
vector<udtPitchmark>Pitchmarks;
};
Я написал огромные векторы «udtAudioInfo» в файл, как это:
// Serialize
int iSize = nAudioInfos.Content().size();
fwrite(&iSize,sizeof(int),1,outfile);
vector<udtAudioInfo>::iterator it = nAudioInfos.Content().begin();
for (;it != nAudioInfos.Content().end(); ++it)
{
//we need to know the position that the data will be written to
int iStartPos= ftell( outfile );
fwrite(&it->ByteStart,sizeof(int),1,outfile);
fwrite(&it->ByteCount,sizeof(int),1,outfile);
int len = it->Pitchmarks.size();
fwrite(&len,sizeof(int),1,outfile);
vector<udtPitchmark>::iterator it2 = it->Pitchmarks.begin();
for(;it2 != it->Pitchmarks.end(); ++it2)
{
fwrite(&it2->ByteStart,sizeof(int),1,outfile);
fwrite(&it2->ByteCount,sizeof(int),1,outfile);
}
//and now we need to know the length of the data that was written
int iEndPos= ftell( outfile );
int iLen=(iEndPos-iStartPos);
//now store the file-location info in a map and save this map when we have saved the entire audio info
nMapping.Add (iStartPos,iLen);
}
Вопрос в том, смогу ли я легко прочитать одно из udtAudioInfos из сопоставленного файла.
Я не уверен, возможно ли просто скопировать такие структуры из файла в переменную.
Спасибо вам за помощь.
Если переносимость и конкретная реализация компилятора не обсуждаются, если какой-то вектор<> хранит свои данные в известном вам порядке, вы можете учесть это при чтении файла изображения. Однако объекты STL не определяют, как они хранят свои данные.
Если вы создадите небольшой тест, вы сможете легко проверить, как хранятся элементы вашего вектора, и вы сможете уверенно работать с ним.
Других решений пока нет …