Package org.xnio.channels

# Interface StreamSourceChannel

All Superinterfaces:
  `AutoCloseable`, `Channel`, `Closeable`, `CloseableChannel`, `Configurable`, `InterruptibleChannel`, `ReadableByteChannel`, `ScatteringByteChannel`, `SuspendableReadChannel`

All Known Subinterfaces:
  `ConnectedSslStreamChannel`, `ConnectedStreamChannel`, `StreamChannel`

All Known Implementing Classes:
  `AssembledConnectedSslStreamChannel`, `AssembledConnectedStreamChannel`, `AssembledStreamChannel`, `ConduitStreamSourceChannel`, `EmptyStreamSourceChannel`, `FixedLengthStreamSourceChannel`, `PushBackStreamChannel`, `SplitStreamSourceChannel`

public interface StreamSourceChannel extends ReadableByteChannel, ScatteringByteChannel, SuspendableReadChannel
A stream source channel. This type of channel is a readable source for bytes. While all channel types are thread-safe, reading a stream from more than one thread concurrently will cause data corruption and may be disallowed at the option of the implementation.

## Field Summary

### Fields inherited from interface org.xnio.channels.Configurable

`EMPTY`

## Method Summary

Modifier and Type
Method
Description
`ChannelListener.Setter<? extends StreamSourceChannel>`
`getCloseSetter()`
Get the setter which can be used to change the close listener for this channel.
`ChannelListener.Setter<? extends StreamSourceChannel>`
`getReadSetter()`
Get the setter which can be used to change the read listener for this channel.
`long`
`transferTo(long position, long count, FileChannel target)`
Transfers bytes into the given file from this channel.
`long`
`transferTo(long count, ByteBuffer throughBuffer, StreamSinkChannel target)`
Transfers bytes into the given channel target.

### Methods inherited from interface java.nio.channels.Channel

`isOpen`

### Methods inherited from interface org.xnio.channels.CloseableChannel

`close, getIoThread, getWorker`

### Methods inherited from interface org.xnio.channels.Configurable

`getOption, setOption, supportsOption`

### Methods inherited from interface java.nio.channels.ReadableByteChannel

`read`

### Methods inherited from interface java.nio.channels.ScatteringByteChannel

`read, read`

### Methods inherited from interface org.xnio.channels.SuspendableReadChannel

`awaitReadable, awaitReadable, getReadThread, isReadResumed, resumeReads, shutdownReads, suspendReads, wakeupReads`

## Method Details

### transferTo

long transferTo(long position, long count, FileChannel target) throws IOException
Transfers bytes into the given file from this channel. Using this method in preference to `FileChannel.transferFrom(ReadableByteChannel, long, long)` may provide a performance advantage on some platforms.

If the current thread is interrupted when this method is called, it may throw a `InterruptedIOException`; however, if this exception is thrown, the `InterruptedIOException.bytesTransferred` field is guaranteed to be 0.

Parameters:
  `position` - the position within the file from which the transfer is to begin
  `count` - the number of bytes to be transferred
  `target` - the file to write to
Returns:
  the number of bytes (possibly 0) that were actually transferred
Throws:
  `IOException` - if an I/O error occurs

### transferTo

long transferTo(long count, ByteBuffer throughBuffer, StreamSinkChannel target) throws IOException
Transfers bytes into the given channel target. On some platforms, this may avoid copying bytes between user and kernel space. On other platforms, bytes are passed through the `throughBuffer` parameter's buffer space. On entry, `throughBuffer` will 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 than `count`, then the remaining data in `throughBuffer` may contain data read from this channel which must be written to `target` to complete the operation. Note that using a direct buffer may provide an intermediate performance gain on platforms without zero-copy facilities.

If the current thread is interrupted when this method is called, it may throw a `InterruptedIOException`; however, if this exception is thrown, the `InterruptedIOException.bytesTransferred` field is guaranteed to be 0. Note that the return value is the amount of data that was actually transferred to the `StreamSinkChannel`. The actual amount of data read could be larger than this, and can be calculated by adding the return value and the amount of data left in `throughBuffer`.

Parameters:
  `count` - the number of bytes to be transferred
  `throughBuffer` - 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:
  `IOException` - if an I/O error occurs

### getReadSetter

ChannelListener.Setter<? extends StreamSourceChannel> getReadSetter()
Get the setter which can be used to change the read listener for this channel.

Specified by:
  `getReadSetter` in interface `SuspendableReadChannel`
Returns:
  the setter

### getCloseSetter

ChannelListener.Setter<? extends StreamSourceChannel> getCloseSetter()
Get the setter which can be used to change the close listener for this channel. If the channel is already closed, then the listener will not be called.

Specified by:
  `getCloseSetter` in interface `CloseableChannel`
Specified by:
  `getCloseSetter` in interface `SuspendableReadChannel`
Returns:
  the setter