When an object is serialized, it means it is converted to a stream of data that can be stored in persistent storage, or sent across a communications channel, then reconstituted into an object at a later time. This is usually done by writing out a code for the object type followed by the data stored in its data members, one by one. Data members that are basic types (such as char, int, long, etc.) can be streamed out just by writing their bits to the output. Data members that are user defined types (such as other objects) are told to serialize themselves, and they repeat the process, serializing their own data members, until the whole object has been serialized to the output stream as a sequence of basic types. Data members that are pointers or references to external objects must be handled differently so that only one copy of the external object is serialized. There are various ways of doing this, depending on the library in use. Some implementations give each object that is pointed to a unique ID, and output this ID for each pointer. When the objects are reconstituted, the pointers are replaced by the address of the reconstituted external object. Reconstituting objects from the serialized stream is the reverse of serialization. The object type is read in, and an empty object of that type is constructed. Each data serialized member is then read in turn and assigned to the new object's corresponding data member. Note that this system requires that full details of the serialization system and the object types are available for both serializing and reconstituting the objects. Also, a default constructor (taking no arguments) is usually required when objects are reconstituted. Dave