Wenn ich über die Serialisierung spreche, kommt mir die boost serialization API in den Sinn. Wie für die Übertragung der serialisierten Daten über das Netz, würde ich entweder Berkeley-Steckdosen oder die asio library verwenden.
Edit:
Wenn Sie Ihre Objekte in ein Byte-Array serialisieren möchten, können Sie die Boost-Serializer auf folgende Weise (aus dem Tutorial-Website) verwenden können:
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
class gps_position
{
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & degrees;
ar & minutes;
ar & seconds;
}
int degrees;
int minutes;
float seconds;
public:
gps_position(){};
gps_position(int d, int m, float s) :
degrees(d), minutes(m), seconds(s)
{}
};
Tatsächliche Serialisierung dann ganz einfach:
#include <fstream>
std::ofstream ofs("filename.dat", std::ios::binary);
// create class instance
const gps_position g(35, 59, 24.567f);
// save data to archive
{
boost::archive::binary_oarchive oa(ofs);
// write class instance to archive
oa << g;
// archive and stream closed when destructors are called
}
Die Deserialisierung funktioniert in analoger Weise.
Es gibt auch Mechanismen, mit denen Sie Serialisierung von Zeigern (komplexe Datenstrukturen wie Tress usw. sind kein Problem), abgeleitete Klassen und Sie können zwischen Binär-und Text-Serialisierung wählen können. Außerdem werden alle STL-Container direkt aus der Box unterstützt.
Werfen Sie einen Blick auf [STLPLUS] [1], lib mit Persistenz-Implementierung. [1]: http: //stlplus.sourceforge.net/ – lsalamon
Schauen Sie sich [google :: protobuf] (http://code.google.com/p/protobuf/) an, es ist eine sehr starke und schnelle Bibliothek für die binäre Serialisierung . Wir haben es erfolgreich mit boost :: asio etc. verwendet. – Ketan
Die angegebenen Antworten erklären nicht wirklich * wie * serialisieren. Einer bietet die Boost-Serialisierungs-Bibliothek an, der andere erklärt Fehler in einer naiven Implementierung. Da dies die Frage [tag: C++ - faq] ist, kann jemand tatsächlich antworten? –