java.nio.channels
Class Channels.ReadableByteChannelImpl

java.lang.Object
  extended byjava.nio.channels.spi.AbstractInterruptibleChannel
      extended byjava.nio.channels.Channels.ReadableByteChannelImpl
All Implemented Interfaces:
Channel, InterruptibleChannel, ReadableByteChannel
Enclosing class:
Channels

private static class Channels.ReadableByteChannelImpl
extends AbstractInterruptibleChannel
implements ReadableByteChannel


Nested Class Summary
 
Nested classes inherited from class java.nio.channels.spi.AbstractInterruptibleChannel
 
Field Summary
private  byte[] buf
           
(package private)  InputStream in
           
private  boolean open
           
private  Object readLock
           
private static int TRANSFER_SIZE
           
 
Fields inherited from class java.nio.channels.spi.AbstractInterruptibleChannel
 
Constructor Summary
(package private) Channels.ReadableByteChannelImpl(InputStream in)
           
 
Method Summary
protected  void implCloseChannel()
          Closes this channel.
 int read(ByteBuffer dst)
          Reads a sequence of bytes from this channel into the given buffer.
 
Methods inherited from class java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end, isOpen
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface java.nio.channels.Channel
close, isOpen
 

Field Detail

in

InputStream in

TRANSFER_SIZE

private static final int TRANSFER_SIZE
See Also:
Constant Field Values

buf

private byte[] buf

open

private boolean open

readLock

private Object readLock
Constructor Detail

Channels.ReadableByteChannelImpl

Channels.ReadableByteChannelImpl(InputStream in)
Method Detail

read

public int read(ByteBuffer dst)
         throws IOException
Description copied from interface: ReadableByteChannel
Reads a sequence of bytes from this channel into the given buffer.

An attempt is made to read up to r bytes from the channel, where r is the number of bytes remaining in the buffer, that is, dst.remaining(), at the moment this method is invoked.

Suppose that a byte sequence of length n is read, where 0 <= n <= r. This byte sequence will be transferred into the buffer so that the first byte in the sequence is at index p and the last byte is at index p + n - 1, where p is the buffer's position at the moment this method is invoked. Upon return the buffer's position will be equal to p + n; its limit will not have changed.

A read operation might not fill the buffer, and in fact it might not read any bytes at all. Whether or not it does so depends upon the nature and state of the channel. A socket channel in non-blocking mode, for example, cannot read any more bytes than are immediately available from the socket's input buffer; similarly, a file channel cannot read any more bytes than remain in the file. It is guaranteed, however, that if a channel is in blocking mode and there is at least one byte remaining in the buffer then this method will block until at least one byte is read.

This method may be invoked at any time. If another thread has already initiated a read operation upon this channel, however, then an invocation of this method will block until the first operation is complete.

Specified by:
read in interface ReadableByteChannel
Parameters:
dst - The buffer into which bytes are to be transferred
Returns:
The number of bytes read, possibly zero, or -1 if the channel has reached end-of-stream
Throws:
IOException - If some other I/O error occurs

implCloseChannel

protected void implCloseChannel()
                         throws IOException
Description copied from class: AbstractInterruptibleChannel
Closes this channel.

This method is invoked by the close method in order to perform the actual work of closing the channel. This method is only invoked if the channel has not yet been closed, and it is never invoked more than once.

An implementation of this method must arrange for any other thread that is blocked in an I/O operation upon this channel to return immediately, either by throwing an exception or by returning normally.

Specified by:
implCloseChannel in class AbstractInterruptibleChannel
Throws:
IOException - If an I/O error occurs while closing the channel