org.firebirdsql.gds.impl.wire

## Class XdrInputStream

- java.lang.Object
- - java.io.InputStream
  - - java.io.FilterInputStream
    - - org.firebirdsql.gds.impl.wire.XdrInputStream

All Implemented Interfaces:
  java.io.Closeable, java.lang.AutoCloseable

    public final class XdrInputStream
    extends java.io.FilterInputStream

`XdrInputStream` is an input stream for reading in data that is in the XDR format. An `XdrInputStream` instance is wrapped around an underlying `java.io.InputStream`.

This class is not thread-safe.

Version:
  1.0
Author:
  Alejandro Alberola, David Jencks, Mark Rotteveel

### Field Summary

### Fields inherited from class java.io.FilterInputStream

`in`

### Constructor Summary

Constructors
Constructor and Description
`XdrInputStream(java.io.InputStream in)` Create a new instance of `XdrInputStream`.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `enableDecompression()` Wraps the underlying stream for zlib decompression.
`byte[]` `readBuffer()` Read in a byte buffer.
`void` `readFully(byte[] b, int off, int len)` Read a given amount of data from the underlying input stream.
`int` `readInt()` Read in an `int`.
`long` `readLong()` Read in a `long`.
`byte[]` `readRawBuffer(int len)` Read in a raw array of bytes.
`int` `readShort()` Read in a `short`.
`java.lang.String` `readString(Encoding encoding)` Read in a `String`.
`void` `setCipher(javax.crypto.Cipher cipher)` Wraps the underlying stream for encryption using the provided `cipher`.
`int` `skipFully(int numbytes)` Skips the specified number of bytes.
`int` `skipPadding(int length)` Skips the padding after a buffer of the specified length.

### Methods inherited from class java.io.FilterInputStream

`available, close, mark, markSupported, read, read, read, reset, skip`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### XdrInputStream

    public XdrInputStream(java.io.InputStream in)

Create a new instance of `XdrInputStream`.

Parameters:
  `in` - The underlying `InputStream` to read from

### Method Detail

#### skipPadding

    public int skipPadding(int length)
                    throws java.io.IOException

Skips the padding after a buffer of the specified length. The number of bytes to skip is calculated as `(4 - length) & 3`.

Parameters:
  `length` - Length of the previously read buffer
Returns:
  Actual number of bytes skipped
Throws:
  `java.io.IOException` - IOException if an error occurs while reading from the underlying input stream
See Also:
  `XdrOutputStream.writePadding(int, int)`

#### skipFully

    public int skipFully(int numbytes)
                  throws java.io.IOException

Skips the specified number of bytes.

Parameters:
  `numbytes` - Number of bytes to skip.
Returns:
  Actual number of bytes skipped (usually `numbytes`, unless the underlying input stream is closed).
Throws:
  `java.io.IOException` - IOException if an error occurs while reading from the underlying input stream

#### readBuffer

    public byte[] readBuffer()
                      throws java.io.IOException

Read in a byte buffer.

Returns:
  The buffer that was read
Throws:
  `java.io.IOException` - if an error occurs while reading from the underlying input stream

#### readRawBuffer

    public byte[] readRawBuffer(int len)
                         throws java.io.IOException

Read in a raw array of bytes.

Parameters:
  `len` - The number of bytes to read
Returns:
  The byte buffer that was read
Throws:
  `java.io.IOException` - if an error occurs while reading from the underlying input stream

#### readString

    public java.lang.String readString(Encoding encoding)
                                throws java.io.IOException

Read in a `String`.

Returns:
  The `String` that was read
Throws:
  `java.io.IOException` - if an error occurs while reading from the underlying input stream

#### readLong

    public long readLong()
                  throws java.io.IOException

Read in a `long`.

Returns:
  The `long` that was read
Throws:
  `java.io.IOException` - if an error occurs while reading from the underlying input stream

#### readInt

    public int readInt()
                throws java.io.IOException

Read in an `int`.

Returns:
  The `int` that was read
Throws:
  `java.io.IOException` - if an error occurs while reading from the underlying input stream

#### readShort

    public int readShort()
                  throws java.io.IOException

Read in a `short`.

Returns:
  The `short` that was read
Throws:
  `java.io.IOException` - if an error occurs while reading from the underlying input stream

#### readFully

    public void readFully(byte[] b,
                          int off,
                          int len)
                   throws java.io.IOException

Read a given amount of data from the underlying input stream. The data that is read is stored in `b`, starting from offset `off`.

Parameters:
  `b` - The byte buffer to hold the data that is read
  `off` - The offset at which to start storing data in `b`
  `len` - The number of bytes to be read
Throws:
  `java.io.IOException` - if an error occurs while reading from the underlying input stream

#### enableDecompression

    @InternalApi
    public void enableDecompression()
                                           throws java.io.IOException

Wraps the underlying stream for zlib decompression.

Throws:
  `java.io.IOException` - If the underlying stream is already set up for decompression

#### setCipher

    public void setCipher(javax.crypto.Cipher cipher)
                   throws java.io.IOException

Wraps the underlying stream for encryption using the provided `cipher`.

An implementation wrapping a stream that also implements `EncryptedStreamSupport` may delegate this call to that wrapped stream.

Parameters:
  `cipher` - Cipher for the stream
Throws:
  `java.io.IOException` - If the underlying stream is already wrapped