### Release-to-Release Data Compatibility (RRDC)

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:

- Each newer version must make its additions to the stream data format at the end of the data written by the previous version.
- Data expected by older versions must continue to be written by newer versions. If the new version doesn't use the old data, then at stream-out time the new version must synthesize the old data or at least a suitable approximation of it to enable old versions to work when they stream in the data.

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