Package org.conscrypt

Class SSLInputStream

java.lang.Object
java.io.InputStream
org.conscrypt.SSLInputStream
All Implemented Interfaces:
Closeable, AutoCloseable
Direct Known Subclasses:
HandshakeIODataStream, SSLBufferedInput, SSLStreamedInput

public abstract class SSLInputStream
extends InputStream
This class is a base for all input stream classes used in protocol implementation. It extends an InputStream with some additional read methods allowing to read TLS specific data types such as uint8, uint32 etc (see TLS v 1 specification at http://www.ietf.org/rfc/rfc2246.txt).
  • Constructor Summary

    Constructors
    Constructor Description
    SSLInputStream()  
  • Method Summary

    Modifier and Type Method Description
    abstract int available()
    Returns an estimated number of bytes that can be read or skipped without blocking for more input.
    abstract int read()
    Reads the following byte value.
    int read​(byte[] b, int off, int len)
    Reads up to byteCount bytes from this stream and stores them in the byte array buffer starting at byteOffset.
    byte[] read​(int length)
    Returns the vector of opaque values of specified length;
    int readUint16()
    Reads and returns uint16 value.
    int readUint24()
    Reads and returns uint24 value.
    long readUint32()
    Reads and returns uint32 value.
    long readUint64()
    Reads and returns uint64 value.
    int readUint8()
    Reads and returns uint8 value.

    Methods inherited from class java.io.InputStream

    close, mark, markSupported, read, reset, skip

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • SSLInputStream

      public SSLInputStream()
  • Method Details

    • available

      public abstract int available() throws IOException
      Description copied from class: InputStream
      Returns 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 ByteArrayOutputStream and 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 InputStream always returns 0. Subclasses should override this method if they are able to indicate the number of bytes available.

      Overrides:
      available in class InputStream
      Returns:
      the estimated number of bytes available
      Throws:
      IOException - if this stream is closed or an error occurs
    • read

      public abstract int read() throws IOException
      Reads the following byte value. Note that in the case of reaching of the end of the data this methods throws the exception, not return -1. The type of exception depends on implementation. It was done for simplifying and speeding up of processing of such cases.
      Specified by:
      read in class InputStream
      Throws:
      IOException - if the stream is closed or another IOException occurs.
      See Also:
      SSLStreamedInput.read(), SSLBufferedInput.read(), HandshakeIODataStream.read()
    • readUint8

      public int readUint8() throws IOException
      Reads and returns uint8 value.
      Throws:
      IOException
    • readUint16

      public int readUint16() throws IOException
      Reads and returns uint16 value.
      Throws:
      IOException
    • readUint24

      public int readUint24() throws IOException
      Reads and returns uint24 value.
      Throws:
      IOException
    • readUint32

      public long readUint32() throws IOException
      Reads and returns uint32 value.
      Throws:
      IOException
    • readUint64

      public long readUint64() throws IOException
      Reads and returns uint64 value.
      Throws:
      IOException
    • read

      public byte[] read​(int length) throws IOException
      Returns the vector of opaque values of specified length;
      Parameters:
      length - - the length of the vector to be read.
      Returns:
      the read data
      Throws:
      IOException - if read operation could not be finished.
    • read

      public int read​(byte[] b, int off, int len) throws IOException
      Description copied from class: InputStream
      Reads up to byteCount bytes from this stream and stores them in the byte array buffer starting at byteOffset. Returns the number of bytes actually read or -1 if the end of the stream has been reached.
      Overrides:
      read in class InputStream
      Throws:
      IOException - if the stream is closed or another IOException occurs.