org.jets3t.service.io
Class InterruptableInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by org.jets3t.service.io.InterruptableInputStream
All Implemented Interfaces:
java.io.Closeable, InputStreamWrapper

public class InterruptableInputStream
extends java.io.InputStream
implements InputStreamWrapper

Input stream wrapper that allows the underlying wrapped input stream to be interrupted. Every time a blocking stream operation is invoked on this class, the interrupt flag is checked first. If this flag is set, the underlying stream is closed and an IOException "Input Stream Interrupted" is thrown.

Note: This hacky class does not really solve the problem of interrupting blocking Java input streams, as it cannot unblock a blocked read operation. It really just serves as a convenient way to interrupt streams before any potentially blocking operations.

Author:
James Murty

Constructor Summary
InterruptableInputStream(java.io.InputStream inputStream)
           
 
Method Summary
 int available()
           
 void close()
           
 java.io.InputStream getWrappedInputStream()
           
 void interrupt()
           
 int read()
           
 int read(byte[] b, int off, int len)
           
 
Methods inherited from class java.io.InputStream
mark, markSupported, read, reset, skip
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InterruptableInputStream

public InterruptableInputStream(java.io.InputStream inputStream)
Method Detail

read

public int read()
         throws java.io.IOException
Specified by:
read in class java.io.InputStream
Throws:
java.io.IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Overrides:
read in class java.io.InputStream
Throws:
java.io.IOException

available

public int available()
              throws java.io.IOException
Overrides:
available in class java.io.InputStream
Throws:
java.io.IOException

close

public void close()
           throws java.io.IOException
Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.InputStream
Throws:
java.io.IOException

getWrappedInputStream

public java.io.InputStream getWrappedInputStream()
Specified by:
getWrappedInputStream in interface InputStreamWrapper
Returns:
the underlying input stream wrapped by this class.

interrupt

public void interrupt()