Package org.firebirdsql.gds.impl.wire

## Class XdrOutputStream

- java.lang.Object
- - java.io.OutputStream
  - - java.io.FilterOutputStream
    - - java.io.BufferedOutputStream
      - - org.firebirdsql.gds.impl.wire.XdrOutputStream

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

    public final class XdrOutputStream
    extends java.io.BufferedOutputStream

An `XdrOutputStream` writes data in XDR format to an underlying `java.io.OutputStream`.

This class is not thread-safe.

Author:
  Alejandro Alberola, David Jencks, Mark Rotteveel

### Field Summary

Fields
`static int` `NULL_BYTE`
`static int` `SPACE_BYTE`

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

`buf, count`

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

`out`

### Constructor Summary

Constructors
`XdrOutputStream​(java.io.OutputStream out)` Create a new instance of `XdrOutputStream` with default buffer size.
`XdrOutputStream​(java.io.OutputStream out, int bufferSize)` Create a new instance of `XdrOutputStream` with the specified buffer size.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `close()` Close this stream and the underlying output stream.
`void` `enableCompression()` Wraps the underlying stream for zlib compression.
`void` `setCipher​(javax.crypto.Cipher cipher)`
`void` `write​(byte[] b, int off, int len)` Writes `len` bytes from the specified byte array starting at offset `off` to this output stream as defined by `OutputStream.write(byte[], int, int)`.
`void` `write​(byte[] b, int offset, int len, int pad)` Write a `byte` buffer to the underlying output stream in XDR format.
`void` `writeAlignment​(int length)` Writes the `0x00` alignment for the specified length.
`void` `writeBuffer​(byte[] buf)` Write byte buffer `buf` to the underlying output stream in XDR format.
`void` `writeBuffer​(byte[] buf, int off, int len)` Write byte buffer `buf` from offset `off` for `len` bytes to the underlying output stream in XDR format.
`void` `writeDirect​(byte[] data)` Writes directly to the `OutputStream` of the underlying socket.
`void` `writeInt​(int v)` Write an `int` value to the underlying stream in XDR format.
`void` `writeLong​(long v)` Write a `long` value to the underlying stream in XDR format.
`void` `writePadding​(int length, int padByte)` Writes padding for the specified length of the specified padding byte.
`void` `writeSpacePadding​(int length)` Writes space (`0x20`) padding of the specified length
`void` `writeString​(java.lang.String s, Encoding encoding)` Write content of the specified string using the specified encoding.
`void` `writeTyped​(int type, Xdrable item)` Write an `Xdrable` to this output stream.
`void` `writeTyped​(ParameterBuffer parameterBuffer)`
`void` `writeZeroPadding​(int length)` Writes zero padding of the specified length

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

`flush, write`

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

`write`

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

`nullOutputStream`

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

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

### Field Detail

#### SPACE_BYTE

    public static final int SPACE_BYTE

See Also:
  Constant Field Values

#### NULL_BYTE

    public static final int NULL_BYTE

See Also:
  Constant Field Values

### Constructor Detail

#### XdrOutputStream

    public XdrOutputStream​(java.io.OutputStream out)

Create a new instance of `XdrOutputStream` with default buffer size.

Parameters:
  `out` - The underlying `OutputStream` to write to

#### XdrOutputStream

    public XdrOutputStream​(java.io.OutputStream out,
                           int bufferSize)

Create a new instance of `XdrOutputStream` with the specified buffer size.

Parameters:
  `out` - The underlying `OutputStream` to write to
  `bufferSize` - The size of the buffer

### Method Detail

#### writeAlignment

    public void writeAlignment​(int length)
                        throws java.io.IOException

Writes the `0x00` alignment for the specified length. This padding is calculated as `(4 - length) & 3`.

Parameters:
  `length` - The length of the previously written buffer to pad
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream

#### writeZeroPadding

    public void writeZeroPadding​(int length)
                          throws java.io.IOException

Writes zero padding of the specified length

Parameters:
  `length` - Length to write
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream
See Also:
  `writePadding(int, int)`

#### writeSpacePadding

    public void writeSpacePadding​(int length)
                           throws java.io.IOException

Writes space (`0x20`) padding of the specified length

Parameters:
  `length` - Length to write
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream
See Also:
  `writePadding(int, int)`

#### writePadding

    public void writePadding​(int length,
                             int padByte)
                      throws java.io.IOException

Writes padding for the specified length of the specified padding byte.

Prefer using the more specific `writeZeroPadding(int)` and `writeZeroPadding(int)`.

Parameters:
  `length` - Length of padding to write
  `padByte` - Padding byte to use
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream
See Also:
  `writeSpacePadding(int)`, `writeZeroPadding(int)`

#### writeBuffer

    public void writeBuffer​(byte[] buf)
                     throws java.io.IOException

Write byte buffer `buf` to the underlying output stream in XDR format.

Parameters:
  `buf` - byte buffer to be written
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream

#### writeBuffer

    public void writeBuffer​(byte[] buf,
                            int off,
                            int len)
                     throws java.io.IOException

Write byte buffer `buf` from offset `off` for `len` bytes to the underlying output stream in XDR format.

Parameters:
  `buf` - byte buffer to be written
  `off` - offset to start
  `len` - length to write
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream
  `java.lang.IndexOutOfBoundsException` - If `off` is negative, `len` is negative, or `len` is greater than `buff.length - off`

#### writeString

    public void writeString​(java.lang.String s,
                            Encoding encoding)
                     throws java.io.IOException

Write content of the specified string using the specified encoding.

Throws:
  `java.io.IOException`

#### writeTyped

    public void writeTyped​(int type,
                           Xdrable item)
                    throws java.io.IOException

Write an `Xdrable` to this output stream.

Parameters:
  `type` - Type of the `Xdrable` to be written, e.g. `ISCConstants.isc_tpb_version3`
  `item` - The object to be written
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream

#### writeTyped

    public void writeTyped​(ParameterBuffer parameterBuffer)
                    throws java.io.IOException

Throws:
  `java.io.IOException`

#### writeLong

    public void writeLong​(long v)
                   throws java.io.IOException

Write a `long` value to the underlying stream in XDR format.

Parameters:
  `v` - The `long` value to be written
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream

#### writeInt

    public void writeInt​(int v)
                  throws java.io.IOException

Write an `int` value to the underlying stream in XDR format.

Parameters:
  `v` - The `int` value to be written
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream

#### write

    public void write​(byte[] b,
                      int offset,
                      int len,
                      int pad)
               throws java.io.IOException

Write a `byte` buffer to the underlying output stream in XDR format.

Parameters:
  `b` - The `byte` buffer to be written
  `offset` - The start offset in the buffer
  `len` - The number of bytes to write
  `pad` - The number of (blank) padding bytes to write
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream

#### write

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

Writes `len` bytes from the specified byte array starting at offset `off` to this output stream as defined by `OutputStream.write(byte[], int, int)`.

Important: do not confuse this method with `write(byte[], int, int, int)` which originally had the signature of this method.

Overrides:
  `write` in class `java.io.BufferedOutputStream`
Parameters:
  `b` - The data
  `off` - The start offset in the data
  `len` - The number of bytes to write
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream

#### close

    public void close()
               throws java.io.IOException

Close this stream and the underlying output stream.

Specified by:
  `close` in interface `java.lang.AutoCloseable`
Specified by:
  `close` in interface `java.io.Closeable`
Overrides:
  `close` in class `java.io.FilterOutputStream`
Throws:
  `java.io.IOException` - if an error occurs while closing the underlying stream

#### enableCompression

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

Wraps the underlying stream for zlib compression.

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

#### setCipher

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

Throws:
  `java.io.IOException`

#### writeDirect

    public void writeDirect​(byte[] data)
                     throws java.io.IOException

Writes directly to the `OutputStream` of the underlying socket.

Parameters:
  `data` - Data to write
Throws:
  `java.io.IOException` - For errors writing to the socket.