- java.lang.Object
-
- org.xnio.conduits.AbstractConduit<D>
-
- org.xnio.conduits.AbstractSourceConduit<D>
-
- org.xnio.conduits.AbstractStreamSourceConduit<StreamSourceConduit>
-
- org.xnio.conduits.PushBackStreamSourceConduit
-
- All Implemented Interfaces:
Conduit,SourceConduit,StreamSourceConduit
public final class PushBackStreamSourceConduit extends AbstractStreamSourceConduit<StreamSourceConduit> implements StreamSourceConduit
A stream source conduit which allows buffers to be "pushed back" to the head of the stream.- Author:
- David M. Lloyd
-
-
Field Summary
-
Fields inherited from class org.xnio.conduits.AbstractConduit
next
-
-
Constructor Summary
Constructors Constructor Description PushBackStreamSourceConduit(StreamSourceConduit next)Construct a new instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidawaitReadable()Block until this channel becomes readable again.voidawaitReadable(long time, java.util.concurrent.TimeUnit timeUnit)Block until this conduit becomes readable again, or until the timeout expires.voidpushBack(Pooled<java.nio.ByteBuffer> pooledBuffer)Push a buffer back to the head of the stream.intread(java.nio.ByteBuffer dst)Read a sequence of bytes from this conduit to the given buffer.longread(java.nio.ByteBuffer[] dsts, int offs, int len)Read a sequence of bytes from this conduit to the given buffers.voidresumeReads()Indicate that the conduit'sReadReadyHandlershould be invoked as soon as data can be read without blocking.voidsetReadReadyHandler(ReadReadyHandler handler)Set the handler which should receive readiness notifications.voidterminateReads()Indicate that no more data will be read from this conduit.longtransferTo(long position, long count, java.nio.channels.FileChannel target)Transfers bytes into the given file from this channel.longtransferTo(long count, java.nio.ByteBuffer throughBuffer, StreamSinkChannel target)Transfers bytes into the given channel target.-
Methods inherited from class org.xnio.conduits.AbstractSourceConduit
getReadThread, isReadResumed, isReadShutdown, suspendReads, wakeupReads
-
Methods inherited from class org.xnio.conduits.AbstractConduit
getWorker
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.xnio.conduits.SourceConduit
getReadThread, isReadResumed, isReadShutdown, suspendReads, wakeupReads
-
-
-
-
Constructor Detail
-
PushBackStreamSourceConduit
public PushBackStreamSourceConduit(StreamSourceConduit next)
Construct a new instance.- Parameters:
next- the delegate conduit to set
-
-
Method Detail
-
resumeReads
public void resumeReads()
Description copied from interface:SourceConduitIndicate that the conduit'sReadReadyHandlershould be invoked as soon as data can be read without blocking.- Specified by:
resumeReadsin interfaceSourceConduit- Overrides:
resumeReadsin classAbstractSourceConduit<StreamSourceConduit>
-
read
public int read(java.nio.ByteBuffer dst) throws java.io.IOExceptionDescription copied from interface:StreamSourceConduitRead a sequence of bytes from this conduit to the given buffer.- Specified by:
readin interfaceStreamSourceConduit- Overrides:
readin classAbstractStreamSourceConduit<StreamSourceConduit>- Returns:
- the number of bytes (possibly 0) that were actually transferred, or -1 if the end of input was reached or
this conduit's
SourceConduit.terminateReads()method was previously called - Throws:
java.io.IOException- if an error occurs
-
read
public long read(java.nio.ByteBuffer[] dsts, int offs, int len) throws java.io.IOExceptionDescription copied from interface:StreamSourceConduitRead a sequence of bytes from this conduit to the given buffers.- Specified by:
readin interfaceStreamSourceConduit- Overrides:
readin classAbstractStreamSourceConduit<StreamSourceConduit>offs- the offset into the buffer arraylen- the number of buffers to fill- Returns:
- the number of bytes (possibly 0) that were actually transferred, or -1 if the end of input was reached or
this conduit's
SourceConduit.terminateReads()method was previously called - Throws:
java.io.IOException- if an error occurs
-
transferTo
public long transferTo(long position, long count, java.nio.channels.FileChannel target) throws java.io.IOExceptionDescription copied from interface:StreamSourceConduitTransfers bytes into the given file from this channel.- Specified by:
transferToin interfaceStreamSourceConduit- Overrides:
transferToin classAbstractStreamSourceConduit<StreamSourceConduit>- Parameters:
position- the position within the file from which the transfer is to begincount- the number of bytes to be transferredtarget- the file to write to- Returns:
- the number of bytes (possibly 0) that were actually transferred
- Throws:
java.io.IOException- if an I/O error occurs
-
transferTo
public long transferTo(long count, java.nio.ByteBuffer throughBuffer, StreamSinkChannel target) throws java.io.IOExceptionDescription copied from interface:StreamSourceConduitTransfers bytes into the given channel target. On entry,throughBufferwill be cleared. On exit, the buffer will be flipped for emptying, and may possibly be empty or may contain data. If this method returns a value less thancount, then the remaining data inthroughBuffermay contain data read from this channel which must be written totargetto complete the operation.- Specified by:
transferToin interfaceStreamSourceConduit- Overrides:
transferToin classAbstractStreamSourceConduit<StreamSourceConduit>- Parameters:
count- the number of bytes to be transferredthroughBuffer- the buffer to copy through.target- the destination to write to- Returns:
- the number of bytes (possibly 0) that were actually transferred, or -1 if the end of input was reached
- Throws:
java.io.IOException- if an I/O error occurs
-
awaitReadable
public void awaitReadable() throws java.io.IOExceptionDescription copied from interface:SourceConduitBlock until this channel becomes readable again. This method may return spuriously before the channel becomes readable.- Specified by:
awaitReadablein interfaceSourceConduit- Overrides:
awaitReadablein classAbstractSourceConduit<StreamSourceConduit>- Throws:
java.io.InterruptedIOException- if the operation is interrupted; the thread's interrupt flag will be set as welljava.io.IOException- if an I/O error occurs
-
awaitReadable
public void awaitReadable(long time, java.util.concurrent.TimeUnit timeUnit) throws java.io.IOExceptionDescription copied from interface:SourceConduitBlock until this conduit becomes readable again, or until the timeout expires. This method may return spuriously before the conduit becomes readable or the timeout expires.- Specified by:
awaitReadablein interfaceSourceConduit- Overrides:
awaitReadablein classAbstractSourceConduit<StreamSourceConduit>- Parameters:
time- the time to waittimeUnit- the time unit- Throws:
java.io.InterruptedIOException- if the operation is interrupted; the thread's interrupt flag will be set as welljava.io.IOException- if an I/O error occurs
-
terminateReads
public void terminateReads() throws java.io.IOExceptionDescription copied from interface:SourceConduitIndicate that no more data will be read from this conduit. If unread data exists, an exception may be thrown.- Specified by:
terminateReadsin interfaceSourceConduit- Overrides:
terminateReadsin classAbstractSourceConduit<StreamSourceConduit>- Throws:
java.io.IOException- if there was a problem
-
setReadReadyHandler
public void setReadReadyHandler(ReadReadyHandler handler)
Description copied from interface:SourceConduitSet 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:
setReadReadyHandlerin interfaceSourceConduit- Overrides:
setReadReadyHandlerin classAbstractSourceConduit<StreamSourceConduit>
-
pushBack
public void pushBack(Pooled<java.nio.ByteBuffer> pooledBuffer)
Push a buffer back to the head of the stream. Once the buffer data is consumed, it will be released back to its original pool (if any).- Parameters:
pooledBuffer- the buffer to push back
-
-