org.apache.hadoop.net
Class SocketInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by 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