Class TimeoutInputStream
java.lang.Object
java.io.InputStream
java.io.FilterInputStream
org.eclipse.ecf.provider.filetransfer.util.TimeoutInputStream
- All Implemented Interfaces:
Closeable
,AutoCloseable
Wraps an input stream that blocks indefinitely to simulate timeouts on
read(), skip(), and close(). The resulting input stream is buffered and
supports retrying operations that failed due to an InterruptedIOException.
Supports resuming partially completed operations after an
InterruptedIOException REGARDLESS of whether the underlying stream does
unless the underlying stream itself generates InterruptedIOExceptions in
which case it must also support resuming. Check the bytesTransferred field to
determine how much of the operation completed; conversely, at what point to
resume.
- Since:
- 3.0
-
Field Summary
Fields inherited from class java.io.FilterInputStream
in
-
Constructor Summary
ConstructorsConstructorDescriptionTimeoutInputStream
(InputStream in, int bufferSize, long readTimeout, long closeTimeout) Creates a timeout wrapper for an input stream.TimeoutInputStream
(InputStream in, int bufferSize, long readTimeout, long closeTimeout, boolean growWhenFull) -
Method Summary
Modifier and TypeMethodDescriptionint
Returns the number of unread bytes in the buffer.void
close()
Wraps the underlying stream's method.boolean
Mark is not supported by the wrapper even if the underlying stream does, returns false.int
read()
Reads a byte from the stream.int
read
(byte[] buffer, int off, int len) Reads multiple bytes from the stream.long
skip
(long count) Skips multiple bytes in the stream.Methods inherited from class java.io.FilterInputStream
mark, read, reset
Methods inherited from class java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
Constructor Details
-
TimeoutInputStream
Creates a timeout wrapper for an input stream.- Parameters:
in
- the underlying input streambufferSize
- the buffer size in bytes; should be large enough to mitigate Thread synchronization and context switching overheadreadTimeout
- the number of milliseconds to block for a read() or skip() before throwing an InterruptedIOException; 0 blocks indefinitelycloseTimeout
- the number of milliseconds to block for a close() before throwing an InterruptedIOException; 0 blocks indefinitely, -1 closes the stream in the background
-
TimeoutInputStream
public TimeoutInputStream(InputStream in, int bufferSize, long readTimeout, long closeTimeout, boolean growWhenFull)
-
-
Method Details
-
close
Wraps the underlying stream's method. It may be important to wait for a stream to actually be closed because it holds an implicit lock on a system resoure (such as a file) while it is open. Closing a stream may take time if the underlying stream is still servicing a previous request.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classFilterInputStream
- Throws:
InterruptedIOException
- if the timeout expiredIOException
- if an i/o error occurs
-
available
Returns the number of unread bytes in the buffer.- Overrides:
available
in classFilterInputStream
- Throws:
IOException
- if an i/o error occurs
-
read
Reads a byte from the stream.- Overrides:
read
in classFilterInputStream
- Throws:
InterruptedIOException
- if the timeout expired and no data was received, bytesTransferred will be zeroIOException
- if an i/o error occurs
-
read
Reads multiple bytes from the stream.- Overrides:
read
in classFilterInputStream
- Throws:
InterruptedIOException
- if the timeout expired and no data was received, bytesTransferred will be zeroIOException
- if an i/o error occurs
-
skip
Skips multiple bytes in the stream.- Overrides:
skip
in classFilterInputStream
- Throws:
InterruptedIOException
- if the timeout expired before all of the bytes specified have been skipped, bytesTransferred may be non-zeroIOException
- if an i/o error occurs
-
markSupported
public boolean markSupported()Mark is not supported by the wrapper even if the underlying stream does, returns false.- Overrides:
markSupported
in classFilterInputStream
-