Class version mismatches can occur when two machines running different software versions exchange data or, on a single machine, when upgraded software accesses older data. With VisualAge C++ streaming classes, however, objects that are created and written to a stream by one version of a class implementation are readable on either a newer or older version.
Release-to-release data compatibility does not make use of version numbers. Class data on a stream are bounded by a frame that allows stream in functions for a class to know when they have reached the end of the data that was written or to skip over any extra data. Thus, new implementations are able to sense that they are reading an older stream data, and do not try to read data that does not exist on the stream. Old class implementations are able to sense and skip over extra data that was written by newer versions.
RRDC can support any number of versions of a class. The main requirements are:
Note: RRDC is only available when using one of the tagged stream formats (see Instantiating a Data Stream for available stream formats). Raw binary stream formats omit the tags that delimit object data on a stream. They are suitable for caching data, streaming between two threads in the same process, and for streaming between two processes on the same machine when both processes are using the same version of a class. Raw binary stream formats are not suitable for persistent data or for streaming between systems that may have different versions of the same DLLs installed. The class wishing to provide RRDC can not enforce the use of a tagged stream format; it's up to whoever specifies the stream to choose an appropriate encoding. RRDC enabled classes (those containing IStreamIn/OutFrames) will stream their data correctly on non-tagged stream; it's only the ability to detect the end of a frame on reading that is lost.
Additional stream frames can be used within a class to delimit variable length data.
Introduction to the
Streaming Classes
Aliased Objects
Monomorphic
Streaming
Polymorphic
Streaming
Data Streams
Application Data
Interfaces
Enabling
Release-to-Release Data Compatibility
Instantiating a
Data Stream
Streaming
Aliases and Aliased Objects
Streaming
Objects Monomorphically
Streaming
Objects Polymorphically