## org.apache.hadoop.net
Class SocketInputStream

    java.lang.Object
      java.io.InputStream
          org.apache.hadoop.net.SocketInputStream

All Implemented Interfaces:
  Closeable, Channel, ReadableByteChannel

    public class SocketInputStream

extends InputStream
implements ReadableByteChannel

This implements an input stream that can have a timeout while reading. This sets non-blocking flag on the socket channel. So after create this object, read() on `Socket.getInputStream()` and write() on `Socket.getOutputStream()` for the associated socket will throw IllegalBlockingModeException. Please use `SocketOutputStream` for writing.

Constructor Summary
`SocketInputStream(ReadableByteChannel channel, long timeout)` Create a new input stream with the given timeout.
`SocketInputStream(Socket socket)` Same as SocketInputStream(socket.getChannel(), socket.getSoTimeout()) : Create a new input stream with the given timeout.
`SocketInputStream(Socket socket, long timeout)` Same as SocketInputStream(socket.getChannel(), timeout): Create a new input stream with the given timeout.

Method Summary
`void` `close()`
`ReadableByteChannel` `getChannel()` Returns underlying channel used by inputstream.
`boolean` `isOpen()`
`int` `read()`
`int` `read(byte[] b, int off, int len)`
`int` `read(ByteBuffer dst)`
`void` `waitForReadable()` waits for the underlying channel to be ready for reading.

Methods inherited from class java.io.InputStream
`available, mark, markSupported, read, reset, skip`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### SocketInputStream

    public SocketInputStream(ReadableByteChannel channel,
                             long timeout)
                      throws IOException

  Create a new input stream with the given timeout. If the timeout is zero, it will be treated as infinite timeout. The socket's channel will be configured to be non-blocking.

  Parameters:
    `channel` - Channel for reading, should also be a `SelectableChannel`. The channel will be configured to be non-blocking.
    `timeout` - timeout in milliseconds. must not be negative.
  Throws:
    `IOException`

### SocketInputStream

    public SocketInputStream(Socket socket,
                             long timeout)
                      throws IOException

  Same as SocketInputStream(socket.getChannel(), timeout):
  Create a new input stream with the given timeout. If the timeout is zero, it will be treated as infinite timeout. The socket's channel will be configured to be non-blocking.

  Parameters:
    `socket` - should have a channel associated with it.
    `timeout` - timeout timeout in milliseconds. must not be negative.
  Throws:
    `IOException`
  See Also:
    `SocketInputStream(ReadableByteChannel, long)`

### SocketInputStream

    public SocketInputStream(Socket socket)
                      throws IOException

  Same as SocketInputStream(socket.getChannel(), socket.getSoTimeout()) :
  Create a new input stream with the given timeout. If the timeout is zero, it will be treated as infinite timeout. The socket's channel will be configured to be non-blocking.

  Parameters:
    `socket` - should have a channel associated with it.
  Throws:
    `IOException`
  See Also:
    `SocketInputStream(ReadableByteChannel, long)`

Method Detail

### read

    public int read()
             throws IOException

  Specified by:
    `read` in class `InputStream`
  Throws:
    `IOException`

### read

    public int read(byte[] b,
                    int off,
                    int len)
             throws IOException

  Overrides:
    `read` in class `InputStream`
  Throws:
    `IOException`

### close

    public void close()
               throws IOException

  Specified by:
    `close` in interface `Closeable`
  Specified by:
    `close` in interface `Channel`
  Overrides:
    `close` in class `InputStream`
  Throws:
    `IOException`

### getChannel

    public ReadableByteChannel getChannel()

  Returns underlying channel used by inputstream. This is useful in certain cases like channel for `FileChannel.transferFrom(ReadableByteChannel, long, long)`.

### isOpen

    public boolean isOpen()

  Specified by:
    `isOpen` in interface `Channel`

### read

    public int read(ByteBuffer dst)
             throws IOException

  Specified by:
    `read` in interface `ReadableByteChannel`
  Throws:
    `IOException`

### waitForReadable

    public void waitForReadable()
                         throws IOException

  waits for the underlying channel to be ready for reading. The timeout specified for this stream applies to this wait.

  Throws:
    `SocketTimeoutException` - if select on the channel times out.
    `IOException` - if any other I/O error occurs.

Copyright © 2009 The Apache Software Foundation