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.

  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
    Modifier and Type | Method and Description
    --- | ---
    `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

Copyright © 2001-2025 Jaybird (Firebird JDBC) team. All rights reserved.