Class StreamSinkChannelWrappingConduit

java.lang.Object
org.xnio.conduits.StreamSinkChannelWrappingConduit
All Implemented Interfaces:
Conduit, SinkConduit, StreamSinkConduit

public final class StreamSinkChannelWrappingConduit extends Object implements StreamSinkConduit
A conduit which wraps a channel, for compatibility.
Author:
David M. Lloyd
  • Constructor Details

    • StreamSinkChannelWrappingConduit

      public StreamSinkChannelWrappingConduit(StreamSinkChannel channel)
      Construct a new instance.
      Parameters:
      channel - the channel to wrap
  • Method Details

    • transferFrom

      public long transferFrom(FileChannel src, long position, long count) throws IOException
      Description copied from interface: StreamSinkConduit
      Transfer bytes into this conduit from the given file.
      Specified by:
      transferFrom in interface StreamSinkConduit
      Parameters:
      src - the file to read from
      position - the position within the file from which the transfer is to begin
      count - the number of bytes to be transferred
      Returns:
      the number of bytes (possibly 0) that were actually transferred
      Throws:
      IOException - if an I/O error occurs
    • transferFrom

      public long transferFrom(StreamSourceChannel source, long count, ByteBuffer throughBuffer) throws IOException
      Description copied from interface: StreamSinkConduit
      Transfers bytes from the given channel source. On entry, throughBuffer will be cleared. On exit, the buffer will be flipped for emptying, and may be empty or may contain data. If this method returns a value less than count, then the remaining data in throughBuffer may contain data read from source which must be written to this channel to complete the operation.
      Specified by:
      transferFrom in interface StreamSinkConduit
      Parameters:
      source - the source to read from
      count - the number of bytes to be transferred
      throughBuffer - the buffer to copy through.
      Returns:
      the number of bytes (possibly 0) that were actually transferred, or -1 if the end of input was reached
      Throws:
      IOException - if an I/O error occurs
    • write

      public int write(ByteBuffer src) throws IOException
      Description copied from interface: StreamSinkConduit
      Writes a sequence of bytes to this conduit from the given buffer.
      Specified by:
      write in interface StreamSinkConduit
      Parameters:
      src - the buffer containing data to write
      Returns:
      the number of bytes written, possibly 0
      Throws:
      IOException - if an error occurs
    • write

      public long write(ByteBuffer[] srcs, int offs, int len) throws IOException
      Description copied from interface: StreamSinkConduit
      Writes a sequence of bytes to this conduit from the given buffers.
      Specified by:
      write in interface StreamSinkConduit
      Parameters:
      srcs - the buffers containing data to write
      offs - the offset into the buffer array
      len - the number of buffers to write
      Returns:
      the number of bytes written, possibly 0
      Throws:
      IOException - if an error occurs
    • writeFinal

      public int writeFinal(ByteBuffer src) throws IOException
      Description copied from interface: StreamSinkConduit
      Writes some data to the conduit, with the same semantics as StreamSinkConduit.write(java.nio.ByteBuffer). If all the data is written out then the conduit will have its writes terminated. Semantically this method is equivalent to: int rem = src.remaining(); int written = conduit.write(src); if(written == rem) { conduit.terminateWrites() }
      Specified by:
      writeFinal in interface StreamSinkConduit
      Parameters:
      src - The data to write
      Returns:
      The amount of data that was actually written.
      Throws:
      IOException
    • writeFinal

      public long writeFinal(ByteBuffer[] srcs, int offset, int length) throws IOException
      Description copied from interface: StreamSinkConduit
      Writes some data to the conduit, with the same semantics as StreamSinkConduit.write(java.nio.ByteBuffer[], int, int). If all the data is written out then the conduit will have its writes terminated.
      Specified by:
      writeFinal in interface StreamSinkConduit
      Parameters:
      srcs - The buffers from which bytes are to be retrieved
      offset - The offset within the buffer array of the first buffer from which bytes are to be retrieved; must be non-negative and no larger than srcs.length
      length - The maximum number of buffers to be accessed; must be non-negative and no larger than srcs.length - offset
      Returns:
      The amount of data that was actually written
      Throws:
      IOException
    • terminateWrites

      public void terminateWrites() throws IOException
      Description copied from interface: SinkConduit
      Signal that no more write data is forthcoming. The conduit must be SinkConduit.flush()ed before it is considered to be shut down.
      Specified by:
      terminateWrites in interface SinkConduit
      Throws:
      IOException
    • isWriteShutdown

      public boolean isWriteShutdown()
      Description copied from interface: SinkConduit
      Determine whether writes have been fully shut down on this conduit.
      Specified by:
      isWriteShutdown in interface SinkConduit
      Returns:
      true if writes are fully shut down, false otherwise
    • resumeWrites

      public void resumeWrites()
      Description copied from interface: SinkConduit
      Indicate that the conduit's WriteReadyHandler should be invoked as soon as data can be written without blocking.
      Specified by:
      resumeWrites in interface SinkConduit
    • suspendWrites

      public void suspendWrites()
      Description copied from interface: SinkConduit
      Indicate that calling the conduit's WriteReadyHandler should be suspended.
      Specified by:
      suspendWrites in interface SinkConduit
    • wakeupWrites

      public void wakeupWrites()
      Description copied from interface: SinkConduit
      Indicate that the conduit's WriteReadyHandler should be invoked immediately, and then again as soon as data can be written without blocking.
      Specified by:
      wakeupWrites in interface SinkConduit
    • isWriteResumed

      public boolean isWriteResumed()
      Description copied from interface: SinkConduit
      Determine whether write notifications are currently enabled.
      Specified by:
      isWriteResumed in interface SinkConduit
      Returns:
      true if write notifications are enabled
    • awaitWritable

      public void awaitWritable() throws IOException
      Description copied from interface: SinkConduit
      Block until this channel becomes writable again. This method may return spuriously before the channel becomes writable.
      Specified by:
      awaitWritable in interface SinkConduit
      Throws:
      IOException - if an I/O error occurs
    • awaitWritable

      public void awaitWritable(long time, TimeUnit timeUnit) throws IOException
      Description copied from interface: SinkConduit
      Block until this conduit becomes writable again, or until the timeout expires. This method may return spuriously before the conduit becomes writable or the timeout expires.
      Specified by:
      awaitWritable in interface SinkConduit
      Parameters:
      time - the time to wait
      timeUnit - the time unit
      Throws:
      IOException - if an I/O error occurs
    • getWriteThread

      public XnioIoThread getWriteThread()
      Description copied from interface: SinkConduit
      Get the write thread for this conduit.
      Specified by:
      getWriteThread in interface SinkConduit
      Returns:
      the thread, or null if none is configured or available
    • setWriteReadyHandler

      public void setWriteReadyHandler(WriteReadyHandler handler)
      Description copied from interface: SinkConduit
      Set the handler which should receive readiness notifications. A filter may pass this invocation on to the filter it wraps, or it may substitute itself.
      Specified by:
      setWriteReadyHandler in interface SinkConduit
    • truncateWrites

      public void truncateWrites() throws IOException
      Description copied from interface: SinkConduit
      Terminate writes and discard any outstanding write data. The conduit is terminated and flushed regardless of the outcome of this method.
      Specified by:
      truncateWrites in interface SinkConduit
      Throws:
      IOException - if channel termination failed for some reason
    • flush

      public boolean flush() throws IOException
      Description copied from interface: SinkConduit
      Flush out any unwritten, buffered output.
      Specified by:
      flush in interface SinkConduit
      Returns:
      true if everything is flushed, false otherwise
      Throws:
      IOException - if flush fails
    • getWorker

      public XnioWorker getWorker()
      Description copied from interface: Conduit
      Get the XNIO worker associated with this conduit.
      Specified by:
      getWorker in interface Conduit
      Returns:
      the XNIO worker associated with this conduit