Boost logo

Boost Users :

From: Robert Ramey (ramey_at_[hidden])
Date: 2005-09-04 13:33:14


Leon Mergen wrote:
> I wondered how the Boost.Serialization library determines how many
> bytes to read from an input stream to "fill" a class with data.

> That is, does it read an entire input stream until the end of the stream
> and use that as the data to fill a class with, or does it perform a
> sizeof(class) and read that from the stream ?

Neither. Each class has its serialize function. Within this function it
calls the operator << to copy the member data to archive. There are two
cases:

a) the data type is a primitive - int, etc - in which case the archive has
method for storing it and knows the length of an int on the particular
platform.

b) the datatype is a class - in which case that class's serialize function
is called.

So eventually the serialization resolves to a string of calls to primitive
types - all of which are supported by the archive class.

> If it is the latter, then out of curiosity, how does it determine the
> size of an object with different class versions ( so if an object
> version 1 has been saved and then tries to load version

The first piece of data stored with the class is a version number. On
loading, this is available to be used in conditional ar >> operations. When
one adds a new member to the class - the version number should be updated so
that the loading of new member can be skipped if the archive is an older
version.

2 ) ? Does it write some sort of object size at the beginning of the file ?

no.

> If it reads the entire stream until the end,

None of the currently implmented archive classes do this.

> what would be a good approach to save multiple objects in a single file,
> and be able to
> read just a few objects out of the file ?

Current archive classes don't support a good way to do this. Actually this
is an iteresting application - but its not supported by current archives.
One might be able make a new archive class or a new derivation from one of
the existing ones to support this, but I have no idea how difficult it would
be. At a minium it would require a pretty thorough understanding of the
library and archive classes.

>
> Thanks in advance for any responses.

you're welcome.

Robert Ramey


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net