Class TempOutputStream

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

    public class TempOutputStream
    extends java.io.OutputStream
    An output stream implementation that keeps the data in memory if is less then the specified memoryThreshold otherwise it writes it to a temp file.

    Close the stream before any call to TempOutputStream.getInputStream().

    If deleteTempFileOnClose is false then use proper try-finally patterns to ensure that the temp file is destroyed after it is no longer needed.

       try
       {
          StreamUtils.copy(new BufferedInputStream(new FileInputStream(file)), tempOutputStream);
          tempOutputStream.close();
       }
       finally
       {
           tempOutputStream.destroy();
       }
       
     
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String TEMP_FILE_PREFIX  
    • Constructor Summary

      Constructors 
      Constructor Description
      TempOutputStream​(java.io.File tempDir, int memoryThreshold, long maxContentSize, boolean encrypt, boolean deleteTempFileOnClose)
      Creates a TempOutputStream.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()  
      void destroy()
      Closes the stream and removes the backing file (if present).
      void flush()  
      java.io.InputStream getInputStream()
      Returns the data as an InputStream
      long getLength()  
      void write​(byte[] b, int off, int len)  
      void write​(int b)  
      • Methods inherited from class java.io.OutputStream

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

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

      • TEMP_FILE_PREFIX

        public static final java.lang.String TEMP_FILE_PREFIX
        See Also:
        Constant Field Values
    • Constructor Detail

      • TempOutputStream

        public TempOutputStream​(java.io.File tempDir,
                                int memoryThreshold,
                                long maxContentSize,
                                boolean encrypt,
                                boolean deleteTempFileOnClose)
        Creates a TempOutputStream.
        Parameters:
        tempDir - the temporary directory, i.e. isDir == true, that will be used as * parent directory for creating temp file backed streams
        memoryThreshold - the memory threshold in B
        maxContentSize - the max content size in B
        encrypt - true if temp files should be encrypted
        deleteTempFileOnClose - true if temp files should be deleted on output stream close (useful if we need to cache the content for further reads). If this is false then we need to make sure we call TempOutputStream.destroy to clean up properly.
    • Method Detail

      • getInputStream

        public java.io.InputStream getInputStream()
                                           throws java.io.IOException
        Returns the data as an InputStream
        Throws:
        java.io.IOException
      • write

        public void write​(int b)
                   throws java.io.IOException
        Specified by:
        write in class java.io.OutputStream
        Throws:
        java.io.IOException
      • write

        public void write​(byte[] b,
                          int off,
                          int len)
                   throws java.io.IOException
        Overrides:
        write in class java.io.OutputStream
        Throws:
        java.io.IOException
      • flush

        public void flush()
                   throws java.io.IOException
        Specified by:
        flush in interface java.io.Flushable
        Overrides:
        flush in class java.io.OutputStream
        Throws:
        java.io.IOException
      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.io.OutputStream
        Throws:
        java.io.IOException
      • destroy

        public void destroy()
                     throws java.io.IOException
        Closes the stream and removes the backing file (if present).

        If deleteTempFileOnClose is false then use proper try-finally patterns to ensure that the temp file is destroyed after it is no longer needed.

           try
           {
              StreamUtils.copy(new BufferedInputStream(new FileInputStream(file)), tempOutputStream);
              tempOutputStream.close();
           }
           finally
           {
               tempOutputStream.destroy();
           }
           
         
        Throws:
        java.io.IOException
      • getLength

        public long getLength()