We have written a few modules for reading/writing objects to/from strings and files in a portable and flexible manner, but most importantly (for us, anyway), in a manner that is compatible with Java primitives, and in a similar style to the Java classes, allowing the design of our Java/Perl code to remain similar. DataEncoding DataInputStream DataOutputStream Classes for reading/writing primitives in a portable fashion. These classes implement DataInput & DataOutput interfaces. They read and write to InputStream and OutputStream InputStream & OutputStream are imaginary classes The following classes derive from InputStream and OutputStream: FileInputStream FileOutputStream StringInputStream StringOutputStream Streamable When this class is inherited from, the derived class should defined two methods: readFromDataStream writeToDataStream Classes defining these can then save and restore themselves from DataInput/DataOutput streams, and use other methods defined in Streamable, such as save, restore, saveToFile, readFromFile etc. We will be making other modules available at a later data, such as MessageDigestOutputStream (to go with the MD5 and SHA cryptographic hash functions), and perhaps SocketInputStream and SocketOutputStream. The beauty of these extra "Stream" modules deriving from InputStream and OutputStream is that all objects deriving from Streamable will automatically be able to save/restore themselves to/from the new stream module.