Serialization

Started by
6 comments, last by wood_brian 11 years, 5 months ago
Can anyone recommend a fast method to serialize a class or struct so it can be send over a socket, and a short example would be nice.
Advertisement
You can send struct or class directly, assuming they don't have any pointers inside, packing is right, byte order is right and they don't have any virtual methods.
To fix any of those problems, copy data you want to send into single buffer, ex. array, and send it.
Do you know how to serialize (save) that struct or class to a file?
If so, treat a block of memory as a "file" and "save" it to there. Then send that block as a message over the network.
enum Bool { True, False, FileNotFound };
Ok thanks for the help. Because I'm sending quite large data structures, I decided to use the boost libraries (good choice?). I can send the structs like so;

std::ostringstream archive_stream;
boost::archive::text_oarchive archive(archive_stream);
archive << myStruct;
sendto(Socket, archive_stream.str().c_str(), sizeof(archive_stream.str().c_str()), 0, (SOCKADDR *) & SockAddr, sizeof(SockAddr));

but how to I receive them on the other end?
I would recommend that you take a look at messagepack, it is used to serialize/deserialize data (for sending over network or storing to file).
http://msgpack.org/
If you're sending very large data you may want to consider using some light zlib compression as well (if your network performance is suffering), but that's something to do later, once you've got this working.

Remember that 'serialize' is just a fancy word for 'put in a specific order'. If you hold the relevant data in your classes as a member struct then you should have an easier time serializing, since you can just grab that struct from the object.
void hurrrrrrrr() {__asm sub [ebp+4],5;}

There are ten kinds of people in this world: those who understand binary and those who don't.
If the objects you want to send are pure data, you may want to also take look at Google's Protocol Buffers.
The C++ Middleware Writer serializes objects so they can be sent across a network. There are links to examples on the home page.

This topic is closed to new replies.

Advertisement