Я реализую буфер данных, который получает пакеты аудиоданных с вызовом процедуры (без сетевых протоколов, только два приложения, работающие на одном компьютере) из одного приложения, помещает его в Struct и записывает в сопоставленный файл.
Таким образом, приложение-писатель может вызвать процедуру моего приложения, что-то вроде void writeData (DataItem data, Timestamp ts)
примерно 15 раз в секунду с размером каждого элемента данных 2 МБ.
Мое приложение должно хранить данные в виде структуры
Struct DataItem
{
long id;
... Data;
Time insertTime;
}
и запишите его в файл для дальнейшего чтения.
Поэтому, поскольку трудно сохранить структуру в файле как есть, я думаю (?) Мне нужно записать ее в двоичном виде. Так что я не уверен, что мне нужно использовать какой-либо сериализации, как boost serialization
или нет?
И я не знаю, как выровнять эти данные для файлов карты памяти и как восстановить данные для чтения из файла.
Я ищу в интернете, но не могу найти много примеров кода. И образец кода будет очень ценным.
Кстати, я использую встроенную Windows 7 x64 и Visual Studio 2008.
Спасибо…
Обычный способ сериализации в C ++:
struct myStruct
{
int IntData;
float FloatData;
std::string StringData;
};
std::ostream& operator<<(std::ostream &os, const myStruct &myThing)
{
os
<< myThing.IntData << " "<< myThing.FloatData << " "<< myThing.StringData << " ";
return os;
}
std::istream& operator>>(std::istream &is, myStruct &myThing)
{
is
>> myThing.IntData
>> myThing.FloatData
>> myThing.StringData;
return is;
}void WriteThing()
{
myStruct myThing;
myThing.IntData = 42;
myThing.FloatData = 0.123;
myThing.StringData = "My_String_Test";
std::ofstream outFile;
outFile.open("myFile.txt");
outFile << myThing;
}
void ReadThing()
{
myStruct myThing;
std::ifstream inFile;
inFile.open("myFile.txt");
inFile >> myThing;
}
Пожалуйста, обратите внимание:
использование повышение :: сериализации с текстовым архивом.
Является наиболее «стандартным» способом решения независимости платформы.
Необязательно, вы можете установить сжатие gzip поверх него.
Вы уверены, что спрашиваете о C ++, а не о C #? Ваш пример кода выглядит как C #
В C ++ Если ваш структурный формат не изменится, вы можете просто записать массив на диск.
вот пример, как вы просили, но это действительно C 101 материал
FILE* output=fopen ("myfile", "wb");
fwrite (array, sizeof (mystruct), number_of_elements_in_array, output);
fclose (output);