Class MemoryEfficientByteArrayOutputStream

  • All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.AutoCloseable

    public final class MemoryEfficientByteArrayOutputStream
    extends java.io.ByteArrayOutputStream
    This class is designed to minimise the number of System.arraycopy(); methods required to complete. ByteArrayOutputStream in the JDK is tuned for a wide variety of purposes. This sub-class starts with an initial size which is a closer match for ehcache usage.
    Version:
    $Id$
    Author:
    Greg Luck
    • Field Summary

      • Fields inherited from class java.io.ByteArrayOutputStream

        buf, count
    • Constructor Summary

      Constructors 
      Constructor Description
      MemoryEfficientByteArrayOutputStream​(int size)
      Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      byte[] getBytes()
      Gets the bytes.
      static MemoryEfficientByteArrayOutputStream serialize​(java.io.Serializable serializable)
      Factory method.
      static MemoryEfficientByteArrayOutputStream serialize​(java.io.Serializable serializable, int estimatedPayloadSize)
      Factory method
      • Methods inherited from class java.io.ByteArrayOutputStream

        close, reset, size, toByteArray, toString, toString, toString, toString, write, write, writeBytes, writeTo
      • Methods inherited from class java.io.OutputStream

        flush, nullOutputStream, write
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • MemoryEfficientByteArrayOutputStream

        public MemoryEfficientByteArrayOutputStream​(int size)
        Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes.
        Parameters:
        size - the initial size.
    • Method Detail

      • getBytes

        public byte[] getBytes()
        Gets the bytes.
        Returns:
        the underlying byte[], or a copy if the byte[] is oversized
      • serialize

        public static MemoryEfficientByteArrayOutputStream serialize​(java.io.Serializable serializable,
                                                                     int estimatedPayloadSize)
                                                              throws java.io.IOException
        Factory method
        Parameters:
        serializable - any Object that implements Serializable
        estimatedPayloadSize - how many bytes is expected to be in the Serialized representation
        Returns:
        a ByteArrayOutputStream with a Serialized object in it
        Throws:
        java.io.IOException - if something goes wrong with the Serialization
      • serialize

        public static MemoryEfficientByteArrayOutputStream serialize​(java.io.Serializable serializable)
                                                              throws java.io.IOException
        Factory method. This method optimises memory by trying to make a better guess than the Java default of 32 bytes by assuming the starting point for the serialized size will be what it was last time this method was called.
        Parameters:
        serializable - any Object that implements Serializable
        Returns:
        a ByteArrayOutputStream with a Serialized object in it
        Throws:
        java.io.IOException - if something goes wrong with the Serialization