com.gargoylesoftware.base.io
Class CondensedObjectOutputStream

java.lang.Object
  extended by java.io.OutputStream
      extended by java.io.ObjectOutputStream
          extended by com.gargoylesoftware.base.io.CondensedObjectOutputStream
All Implemented Interfaces:
java.io.Closeable, java.io.DataOutput, java.io.Flushable, java.io.ObjectOutput, java.io.ObjectStreamConstants

public class CondensedObjectOutputStream
extends java.io.ObjectOutputStream

A specialized subclass of ObjectOutputStream that is used to serialize objects. This stream will remove duplicate objects from the stream in order to shrink the resulting byte stream.

Only objects of the following types will be condensed: Character, Double, Integer, Long, Short and String. The biggest benefit will come from duplicate Strings.

Version:
$Revision: 1.5 $
Author:
Mike Bowler

Nested Class Summary
 
Nested classes/interfaces inherited from class java.io.ObjectOutputStream
java.io.ObjectOutputStream.PutField
 
Field Summary
private  java.util.List classes_
           
private  java.lang.String[] classNames_
          The list of classes that we can try condensing.
private  java.util.List objects_
           
 
Fields inherited from interface java.io.ObjectStreamConstants
baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, STREAM_MAGIC, STREAM_VERSION, SUBCLASS_IMPLEMENTATION_PERMISSION, SUBSTITUTION_PERMISSION, TC_ARRAY, TC_BASE, TC_BLOCKDATA, TC_BLOCKDATALONG, TC_CLASS, TC_CLASSDESC, TC_ENDBLOCKDATA, TC_ENUM, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING
 
Constructor Summary
CondensedObjectOutputStream(java.io.OutputStream stream)
          Create the stream
 
Method Summary
protected  java.lang.Object replaceObject(java.lang.Object object)
          Overrides the superclass to perform substitutions of duplicate immutable objects.
 
Methods inherited from class java.io.ObjectOutputStream
annotateClass, annotateProxyClass, close, defaultWriteObject, drain, enableReplaceObject, flush, putFields, reset, useProtocolVersion, write, write, write, writeBoolean, writeByte, writeBytes, writeChar, writeChars, writeClassDescriptor, writeDouble, writeFields, writeFloat, writeInt, writeLong, writeObject, writeObjectOverride, writeShort, writeStreamHeader, writeUnshared, writeUTF
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

classNames_

private final java.lang.String[] classNames_
The list of classes that we can try condensing. Only classes that are immutable should be in this list.


classes_

private final java.util.List classes_

objects_

private final java.util.List objects_
Constructor Detail

CondensedObjectOutputStream

public CondensedObjectOutputStream(java.io.OutputStream stream)
                            throws java.io.IOException
Create the stream

Parameters:
stream - The output stream that we are wrapping
Throws:
java.io.IOException - If the superclass throws an IOException in it's constructor.
Method Detail

replaceObject

protected java.lang.Object replaceObject(java.lang.Object object)
Overrides the superclass to perform substitutions of duplicate immutable objects.

Overrides:
replaceObject in class java.io.ObjectOutputStream
Parameters:
object - The object to be serialized
Returns:
Either the object that was passed in or an identical object that had previously been passed in.