Class TemporaryBuffer.LocalFile

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

    public static class TemporaryBuffer.LocalFile
    extends TemporaryBuffer
    A fully buffered output stream using local disk storage for large data.

    Initially this output stream buffers to memory and is therefore similar to ByteArrayOutputStream, but it shifts to using an on disk temporary file if the output gets too large.

    The content of this buffered stream may be sent to another OutputStream only after this stream has been properly closed by TemporaryBuffer.close().

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.io.File directory
      Directory to store the temporary file under.
      private java.io.File onDiskFile
      Location of our temporary file if we are on disk; otherwise null.
    • Constructor Summary

      Constructors 
      Constructor Description
      LocalFile​(java.io.File directory)
      Create a new temporary buffer, limiting memory usage.
      LocalFile​(java.io.File directory, int inCoreLimit)
      Create a new temporary buffer, limiting memory usage.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void destroy()
      Clear this buffer so it has no data, and cannot be used again.
      long length()
      Obtain the length (in bytes) of the buffer.
      java.io.InputStream openInputStream()
      Open an input stream to read from the buffered data.
      java.io.InputStream openInputStreamWithAutoDestroy()
      Same as TemporaryBuffer.openInputStream() but handling destruction of any associated resources automatically when closing the returned stream.
      protected java.io.OutputStream overflow()
      Open the overflow output stream, so the remaining output can be stored.
      byte[] toByteArray()
      Convert this buffer's contents into a contiguous byte array.
      byte[] toByteArray​(int limit)
      Convert this buffer's contents into a contiguous byte array.
      void writeTo​(java.io.OutputStream os, ProgressMonitor pm)
      Send this buffer to an output stream.
      • Methods inherited from class java.io.OutputStream

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

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • directory

        private final java.io.File directory
        Directory to store the temporary file under.
    • Constructor Detail

      • LocalFile

        public LocalFile​(java.io.File directory)
        Create a new temporary buffer, limiting memory usage.
        Parameters:
        directory - if the buffer has to spill over into a temporary file, the directory where the file should be saved. If null the system default temporary directory (for example /tmp) will be used instead.
      • LocalFile

        public LocalFile​(java.io.File directory,
                         int inCoreLimit)
        Create a new temporary buffer, limiting memory usage.
        Parameters:
        directory - if the buffer has to spill over into a temporary file, the directory where the file should be saved. If null the system default temporary directory (for example /tmp) will be used instead.
        inCoreLimit - maximum number of bytes to store in memory. Storage beyond this limit will use the local file.
    • Method Detail

      • overflow

        protected java.io.OutputStream overflow()
                                         throws java.io.IOException
        Description copied from class: TemporaryBuffer
        Open the overflow output stream, so the remaining output can be stored.
        Specified by:
        overflow in class TemporaryBuffer
        Returns:
        the output stream to receive the buffered content, followed by the remaining output.
        Throws:
        java.io.IOException - the buffer cannot create the overflow stream.
      • toByteArray

        public byte[] toByteArray()
                           throws java.io.IOException
        Description copied from class: TemporaryBuffer
        Convert this buffer's contents into a contiguous byte array.

        The buffer is only complete after TemporaryBuffer.close() has been invoked.

        Overrides:
        toByteArray in class TemporaryBuffer
        Returns:
        the complete byte array; length matches TemporaryBuffer.length().
        Throws:
        java.io.IOException - an error occurred reading from a local temporary file
      • toByteArray

        public byte[] toByteArray​(int limit)
                           throws java.io.IOException
        Description copied from class: TemporaryBuffer
        Convert this buffer's contents into a contiguous byte array. If this size of the buffer exceeds the limit only return the first limit bytes

        The buffer is only complete after TemporaryBuffer.close() has been invoked.

        Overrides:
        toByteArray in class TemporaryBuffer
        Parameters:
        limit - the maximum number of bytes to be returned
        Returns:
        the byte array limited to limit bytes.
        Throws:
        java.io.IOException - an error occurred reading from a local temporary file
      • writeTo

        public void writeTo​(java.io.OutputStream os,
                            ProgressMonitor pm)
                     throws java.io.IOException
        Description copied from class: TemporaryBuffer
        Send this buffer to an output stream.

        This method may only be invoked after TemporaryBuffer.close() has completed normally, to ensure all data is completely transferred.

        Overrides:
        writeTo in class TemporaryBuffer
        Parameters:
        os - stream to send this buffer's complete content to.
        pm - if not null progress updates are sent here. Caller should initialize the task and the number of work units to TemporaryBuffer.length()/1024.
        Throws:
        java.io.IOException - an error occurred reading from a temporary file on the local system, or writing to the output stream.
      • openInputStream

        public java.io.InputStream openInputStream()
                                            throws java.io.IOException
        Description copied from class: TemporaryBuffer
        Open an input stream to read from the buffered data.

        This method may only be invoked after TemporaryBuffer.close() has completed normally, to ensure all data is completely transferred.

        Overrides:
        openInputStream in class TemporaryBuffer
        Returns:
        a stream to read from the buffer. The caller must close the stream when it is no longer useful.
        Throws:
        java.io.IOException - an error occurred opening the temporary file.
      • destroy

        public void destroy()
        Description copied from class: TemporaryBuffer
        Clear this buffer so it has no data, and cannot be used again.
        Overrides:
        destroy in class TemporaryBuffer