Bevorzugte Methode zum serialisieren eines Objekts mit Boost/C++ - Binär-format
Möchte ich zum serialisieren von Instanzen einer Klasse und schickt Sie über die TCP-Verbindung mit C++ /Boost-Bibliotheken. Es gibt zu viele Beispiele gibt... Einige mit text-streams für Puffer und einige mit tcp::iostream
. Ich bin mir nicht sicher, welche ist geeignet für meine Bedürfnisse.
Anforderungen:
- Portabilität über verschiedene Architekturen (endiannes und Bitanzahl sollte kein problem sein)
- Daten müssen im binary-format. (Es ist kein text)
Aktuelle code:
//Client side:
boost::asio::streambuf b;
std::ostream os(&b);
boost::archive::binary_oarchive oa(os);
message m; //The `message' class is serializable
//construct `m'
oa << m;
boost::asio::write(socket,b.data(),boost::asio::transfer_all());
//Server side:
boost::asio::streambuf b;
std::istream is(&b);
boost::archive::binary_iarchive ia(is);
boost::asio::read(socket,b,boost::asio::transfer_all());
message m;
ia >> m;
Die nicht arbeiten. Server beendet sich mit invalid signature
Ausnahme.
InformationsquelleAutor sorush-r | 2013-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie verpflichtet, die Verwendung von Boost? Es sieht aus wie es eine ähnliche Frage ALSO hier - Es gibt eine Antwort, die auf die Boost-Serialisierung TODO-Abschnitt (hier ist die neueste) - es sieht aus wie eine portable Binär-Archiv ist immer noch auf den Autor TODO-Liste, so bin ich nicht sicher, dass es ein Boost-Lösung (noch), dass Ihren Anforderungen genügt.
Könnten Sie erwägen, einen Boost-text-Serialisierung Archiv sowieso, auch wenn Ihre Klassen sind nicht text-basiert. Der Nachteil ist, dass es langsamer ist und das serialisierte format ist mehr aufgebläht, aber es wird tragbar sein.
Alternativen zu betrachten:
Ich hoffe, dies gibt Ihnen einige neuen Ideen zu schauen.
Also ich akzeptiere diese Antwort und bitten Sie einen anderen SO Frage. Dank
Ich downvote diese Antwort, als ich bin daran interessiert, was die OP gefragt, und Sie ging einen völlig anderen Weg. Wie wärs mit "die Beantwortung der Frage, die gestellt wurde"??
InformationsquelleAutor Tom