Class TransactionAwareBufferedWriter

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

    public class TransactionAwareBufferedWriter
    extends java.io.Writer
    Wrapper for a FileChannel that delays actually writing to or closing the buffer if a transaction is active. If a transaction is detected on the call to Writer.write(String) the parameter is buffered and passed on to the underlying writer only when the transaction is committed.
    Author:
    Dave Syer, Michael Minella
    • Field Summary

      • Fields inherited from class java.io.Writer

        lock
    • Constructor Summary

      Constructors 
      ConstructorDescription
      TransactionAwareBufferedWriter​(java.nio.channels.FileChannel channel, java.lang.Runnable closeCallback)
      Create a new instance with the underlying file channel provided, and a callback to execute on close.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      voidclose() 
      voidflush() 
      longgetBufferSize()
      Convenience method for clients to determine if there is any unflushed data.
      voidsetEncoding​(java.lang.String encoding) 
      voidsetForceSync​(boolean forceSync)
      Flag to indicate that changes should be force-synced to disk on flush.
      voidwrite​(char[] cbuf, int off, int len) 
      • Methods inherited from class java.io.Writer

        append, append, append, nullWriter, write, write, write, write
      • Methods inherited from class java.lang.Object

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

      • TransactionAwareBufferedWriter

        public TransactionAwareBufferedWriter​(java.nio.channels.FileChannel channel,
                                              java.lang.Runnable closeCallback)
        Create a new instance with the underlying file channel provided, and a callback to execute on close. The callback should clean up related resources like output streams or channels.
        Parameters:
        channel - channel used to do the actual file IO
        closeCallback - callback to execute on close
    • Method Detail

      • setEncoding

        public void setEncoding​(java.lang.String encoding)
      • setForceSync

        public void setForceSync​(boolean forceSync)
        Flag to indicate that changes should be force-synced to disk on flush. Defaults to false, which means that even with a local disk changes could be lost if the OS crashes in between a write and a cache flush. Setting to true may result in slower performance for usage patterns involving many frequent writes.
        Parameters:
        forceSync - the flag value to set
      • getBufferSize

        public long getBufferSize()
        Convenience method for clients to determine if there is any unflushed data.
        Returns:
        the current size (in bytes) of unflushed buffered data
      • close

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

        public void flush()
                   throws java.io.IOException
        Specified by:
        flush in interface java.io.Flushable
        Specified by:
        flush in class java.io.Writer
        Throws:
        java.io.IOException
      • write

        public void write​(char[] cbuf,
                          int off,
                          int len)
                   throws java.io.IOException
        Specified by:
        write in class java.io.Writer
        Throws:
        java.io.IOException