Class LZFFileOutputStream

  • All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.AutoCloseable, java.nio.channels.Channel, java.nio.channels.WritableByteChannel

    public class LZFFileOutputStream
    extends java.io.FileOutputStream
    implements java.nio.channels.WritableByteChannel
    Helper class that allows use of LZF compression even if a library requires use of FileOutputStream.

    Note that use of this class is not recommended unless you absolutely must use a FileOutputStream instance; otherwise basic LZFOutputStream (which uses aggregation for underlying streams) is more appropriate

    Implementation note: much of the code is just copied from LZFOutputStream, so care must be taken to keep implementations in sync if there are fixes.

    • Field Detail

      • _outputBuffer

        protected byte[] _outputBuffer
      • _position

        protected int _position
      • _cfgFinishBlockOnFlush

        protected boolean _cfgFinishBlockOnFlush
        Configuration setting that governs whether basic 'flush()' should first complete a block or not.

        Default value is 'true'.

      • _outputStreamClosed

        protected boolean _outputStreamClosed
        Flag that indicates if we have already called '_outputStream.close()' (to avoid calling it multiple times)
      • _wrapper

        private final LZFFileOutputStream.Wrapper _wrapper
        Wrapper object we use to allow decoder to write directly to the stream, without ending in infinite loop...
    • Constructor Detail

      • LZFFileOutputStream

        public LZFFileOutputStream​(java.io.File file)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(java.io.File file,
                                   boolean append)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(java.io.FileDescriptor fdObj)
      • LZFFileOutputStream

        public LZFFileOutputStream​(java.lang.String name)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(java.lang.String name,
                                   boolean append)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(ChunkEncoder encoder,
                                   java.io.File file)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(ChunkEncoder encoder,
                                   java.io.File file,
                                   boolean append)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(ChunkEncoder encoder,
                                   java.io.FileDescriptor fdObj)
      • LZFFileOutputStream

        public LZFFileOutputStream​(ChunkEncoder encoder,
                                   java.lang.String name)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(ChunkEncoder encoder,
                                   java.lang.String name,
                                   boolean append)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(ChunkEncoder encoder,
                                   java.io.File file,
                                   BufferRecycler bufferRecycler)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(ChunkEncoder encoder,
                                   java.io.File file,
                                   boolean append,
                                   BufferRecycler bufferRecycler)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(ChunkEncoder encoder,
                                   java.io.FileDescriptor fdObj,
                                   BufferRecycler bufferRecycler)
      • LZFFileOutputStream

        public LZFFileOutputStream​(ChunkEncoder encoder,
                                   java.lang.String name,
                                   BufferRecycler bufferRecycler)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
      • LZFFileOutputStream

        public LZFFileOutputStream​(ChunkEncoder encoder,
                                   java.lang.String name,
                                   boolean append,
                                   BufferRecycler bufferRecycler)
                            throws java.io.FileNotFoundException
        Throws:
        java.io.FileNotFoundException
    • Method Detail

      • setFinishBlockOnFlush

        public LZFFileOutputStream setFinishBlockOnFlush​(boolean b)
        Method for defining whether call to flush() will also complete current block (similar to calling finishBlock()) or not.
      • isOpen

        public boolean isOpen()
        Specified by:
        isOpen in interface java.nio.channels.Channel
      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.nio.channels.Channel
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.io.FileOutputStream
        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
      • write

        public void write​(byte[] b)
                   throws java.io.IOException
        Overrides:
        write in class java.io.FileOutputStream
        Throws:
        java.io.IOException
      • write

        public void write​(byte[] buffer,
                          int offset,
                          int length)
                   throws java.io.IOException
        Overrides:
        write in class java.io.FileOutputStream
        Throws:
        java.io.IOException
      • write

        public void write​(int b)
                   throws java.io.IOException
        Overrides:
        write in class java.io.FileOutputStream
        Throws:
        java.io.IOException
      • write

        public void write​(java.io.InputStream in)
                   throws java.io.IOException
        Throws:
        java.io.IOException
      • write

        public int write​(java.nio.ByteBuffer src)
                  throws java.io.IOException
        Specified by:
        write in interface java.nio.channels.WritableByteChannel
        Throws:
        java.io.IOException
      • write

        public void write​(java.nio.channels.FileChannel in)
                   throws java.io.IOException
        Throws:
        java.io.IOException
      • getFinishBlockOnFlush

        public boolean getFinishBlockOnFlush()
        Accessor for checking whether call to "flush()" will first finish the current block or not
      • finishBlock

        public LZFFileOutputStream finishBlock()
                                        throws java.io.IOException
        Method that can be used to force completion of the current block, which means that all buffered data will be compressed into an LZF block. This typically results in lower compression ratio as larger blocks compress better; but may be necessary for network connections to ensure timely sending of data.
        Throws:
        java.io.IOException
      • writeCompressedBlock

        protected void writeCompressedBlock()
                                     throws java.io.IOException
        Compress and write the current block to the OutputStream
        Throws:
        java.io.IOException
      • rawWrite

        protected void rawWrite​(byte[] buffer,
                                int offset,
                                int length)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • checkNotClosed

        protected void checkNotClosed()
                               throws java.io.IOException
        Throws:
        java.io.IOException