Class IdentityInputStream
- All Implemented Interfaces:
Closeable,AutoCloseable
public class IdentityInputStream extends InputStream
session input buffer.- Since:
- 4.0
- Version:
- $Revision: 560358 $
- Author:
- Oleg Kalnichevski
-
Constructor Summary
Constructors Constructor Description IdentityInputStream(SessionInputBuffer in) -
Method Summary
Modifier and Type Method Description intavailable()Returns an estimated number of bytes that can be read or skipped without blocking for more input.voidclose()Closes this stream.intread()Reads a single byte from this stream and returns it as an integer in the range from 0 to 255.intread(byte[] b, int off, int len)Reads up tobyteCountbytes from this stream and stores them in the byte arraybufferstarting atbyteOffset.Methods inherited from class java.io.InputStream
mark, markSupported, read, reset, skip
-
Constructor Details
-
IdentityInputStream
-
-
Method Details
-
available
Description copied from class:InputStreamReturns an estimated number of bytes that can be read or skipped without blocking for more input.Note that this method provides such a weak guarantee that it is not very useful in practice.
Firstly, the guarantee is "without blocking for more input" rather than "without blocking": a read may still block waiting for I/O to complete — the guarantee is merely that it won't have to wait indefinitely for data to be written. The result of this method should not be used as a license to do I/O on a thread that shouldn't be blocked.
Secondly, the result is a conservative estimate and may be significantly smaller than the actual number of bytes available. In particular, an implementation that always returns 0 would be correct. In general, callers should only use this method if they'd be satisfied with treating the result as a boolean yes or no answer to the question "is there definitely data ready?".
Thirdly, the fact that a given number of bytes is "available" does not guarantee that a read or skip will actually read or skip that many bytes: they may read or skip fewer.
It is particularly important to realize that you must not use this method to size a container and assume that you can read the entirety of the stream without needing to resize the container. Such callers should probably write everything they read to a
ByteArrayOutputStreamand convert that to a byte array. Alternatively, if you're reading from a file,File.length()returns the current length of the file (though assuming the file's length can't change may be incorrect, reading a file is inherently racy).The default implementation of this method in
InputStreamalways returns 0. Subclasses should override this method if they are able to indicate the number of bytes available.- Overrides:
availablein classInputStream- Returns:
- the estimated number of bytes available
- Throws:
IOException- if this stream is closed or an error occurs
-
close
Description copied from class:InputStreamCloses this stream. Concrete implementations of this class should free any resources during close. This implementation does nothing.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classInputStream- Throws:
IOException- if an error occurs while closing this stream.
-
read
Description copied from class:InputStreamReads a single byte from this stream and returns it as an integer in the range from 0 to 255. Returns -1 if the end of the stream has been reached. Blocks until one byte has been read, the end of the source stream is detected or an exception is thrown.- Specified by:
readin classInputStream- Throws:
IOException- if the stream is closed or another IOException occurs.
-
read
Description copied from class:InputStreamReads up tobyteCountbytes from this stream and stores them in the byte arraybufferstarting atbyteOffset. Returns the number of bytes actually read or -1 if the end of the stream has been reached.- Overrides:
readin classInputStream- Throws:
IOException- if the stream is closed or another IOException occurs.
-