SocketInputStream (Apache Hadoop Common 3.5.0 API)
Description: declaration: package: org.apache.hadoop.net, class: SocketInputStream

Package org.apache.hadoop.net

# Class SocketInputStream

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

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`, `Channel`, `ReadableByteChannel`

@LimitedPrivate("HDFS") 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

  Constructors
  Constructor
  Description
  `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.
  `SocketInputStream(ReadableByteChannel channel, long timeout)`
  Create a new input stream with the given timeout.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  `ReadableByteChannel`
  `getChannel()`
  `boolean`
  `isOpen()`
  `int`
  `read()`
  `int`
  `read(byte[] b, int off, int len)`
  `int`
  `read(ByteBuffer dst)`
  `void`
  `setTimeout(long timeoutMs)`
  `void`
  `waitForReadable()`
  waits for the underlying channel to be ready for reading.

  ### Methods inherited from class java.io.InputStream

  `available, mark, markSupported, nullInputStream, read, readAllBytes, readNBytes, readNBytes, reset, skip, skipNBytes, transferTo`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### 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` - raised on errors performing I/O.

  - ### 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` - raised on errors performing I/O.
    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` - raised on errors performing I/O.
    See Also:
      - `SocketInputStream(ReadableByteChannel, long)`

- ## Method Details

  - ### 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 `AutoCloseable`
    Specified by:
      `close` in interface `Channel`
    Specified by:
      `close` in interface `Closeable`
    Overrides:
      `close` in class `InputStream`
    Throws:
      `IOException`

  - ### getChannel

    public ReadableByteChannel getChannel()
    Returns:
      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.

  - ### setTimeout

    public void setTimeout(long timeoutMs)