The implementation, and some APIs, for FXStream and its subclasses have been improved for FOX 1.2:
FXStream now uses a buffer for reading and writing. As a result, these operations are significantly faster, especially when reading or writing small data items. The stream can work with either an internally-managed buffer, or an externally-managed buffer specified by the programmer. The size for the internally managed buffer defaults to 8192 bytes, but can be changed to a more appropriate size.
FXStream now provides byte-swapping capability during writing as well as during reading.
Previously, changing the position in the stream was based on the absolute position (i.e. an offset from the beginning). Now, the position() member function takes an optional second argument to indicate whether the specified offset is relative to the beginning of the stream (FXFromStart), from the current position (FXFromCurrent), or to the end of the stream (FXFromEnd).
FOX 1.2 also adds two new classes for working with files compressed with either gzip or bzip2 style compression. The FXGZFileStream and FXBZFileStream classes can more or less be used as drop-in replacements for the FXFileStream class, with the caveat that the position() member function is not implemented for these classes and will always return FALSE.
For FXStream (and its subclasses, FXFileStream and FXMemoryStream) a change was made for all member functions that take an unsigned integer value (for the number of items to be saved to or loaded from the stream) as their second argument. Previously, the type for this argument was FXuint, now it's unsigned long.