Package org.acplt.oncrpc

## Class XdrUdpEncodingStream

- java.lang.Object
- - org.acplt.oncrpc.XdrEncodingStream
  - - org.acplt.oncrpc.XdrUdpEncodingStream

-     public class XdrUdpEncodingStream
      extends XdrEncodingStream

  The `XdrUdpDecodingStream` class provides the necessary functionality to `XdrDecodingStream` to send XDR packets over the network using the datagram-oriented UDP/IP.
  Version:
    $Revision: 1.2 $ $Date: 2003/08/14 11:07:39 $ $State: Exp $ $Locker: $
  Author:
    Harald Albrecht

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `private byte[]` | `buffer` | The buffer which will receive the encoded information, before it is sent via a datagram socket.
    `private int` | `bufferHighmark` | Index of the last four byte word in the buffer.
    `private int` | `bufferIndex` | The write pointer is an index into the `buffer`.
    `private static byte[]` | `paddingZeros` | Some zeros, only needed for padding -- like in real life.
    `private java.net.InetAddress` | `receiverAddress` | Receiver address of current buffer contents when flushed.
    `private int` | `receiverPort` | The receiver's port.
    `private java.net.DatagramSocket` | `socket` | The datagram socket to be used when sending this XDR stream's buffer contents.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `XdrUdpEncodingStream​(java.net.DatagramSocket datagramSocket, int bufferSize)` | Creates a new UDP-based encoding XDR stream, associated with the given datagram socket.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `beginEncoding​(java.net.InetAddress receiverAddress, int receiverPort)` | Begins encoding a new XDR record.
    `void` | `close()` | Closes this encoding XDR stream and releases any system resources associated with this stream.
    `void` | `endEncoding()` | Flushes this encoding XDR stream and forces any buffered output bytes to be written out.
    `void` | `xdrEncodeInt​(int value)` | Encodes (aka "serializes") a "XDR int" value and writes it down a XDR stream.
    `void` | `xdrEncodeOpaque​(byte[] value, int offset, int length)` | Encodes (aka "serializes") a XDR opaque value, which is represented by a vector of byte values, and starts at `offset` with a length of `length`.

    - ### Methods inherited from class org.acplt.oncrpc.XdrEncodingStream

      `getCharacterEncoding, setCharacterEncoding, xdrEncodeBoolean, xdrEncodeBooleanFixedVector, xdrEncodeBooleanVector, xdrEncodeByte, xdrEncodeByteFixedVector, xdrEncodeByteVector, xdrEncodeDouble, xdrEncodeDoubleFixedVector, xdrEncodeDoubleVector, xdrEncodeDynamicOpaque, xdrEncodeFloat, xdrEncodeFloatFixedVector, xdrEncodeFloatVector, xdrEncodeIntFixedVector, xdrEncodeIntVector, xdrEncodeLong, xdrEncodeLongFixedVector, xdrEncodeLongVector, xdrEncodeOpaque, xdrEncodeOpaque, xdrEncodeShort, xdrEncodeShortFixedVector, xdrEncodeShortVector, xdrEncodeString, xdrEncodeStringFixedVector, xdrEncodeStringVector`

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

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

- - ### Field Detail

    - #### socket

          private java.net.DatagramSocket socket

      The datagram socket to be used when sending this XDR stream's buffer contents.

    - #### receiverAddress

          private java.net.InetAddress receiverAddress

      Receiver address of current buffer contents when flushed.

    - #### receiverPort

          private int receiverPort

      The receiver's port.

    - #### buffer

          private byte[] buffer

      The buffer which will receive the encoded information, before it is sent via a datagram socket.

    - #### bufferIndex

          private int bufferIndex

      The write pointer is an index into the `buffer`.

    - #### bufferHighmark

          private int bufferHighmark

      Index of the last four byte word in the buffer.

    - #### paddingZeros

          private static final byte[] paddingZeros

      Some zeros, only needed for padding -- like in real life.

  - ### Constructor Detail

    - #### XdrUdpEncodingStream

          public XdrUdpEncodingStream​(java.net.DatagramSocket datagramSocket,
                                      int bufferSize)

      Creates a new UDP-based encoding XDR stream, associated with the given datagram socket.
      Parameters:
        `datagramSocket` - Datagram-based socket to use to get rid of encoded data.
        `bufferSize` - Size of buffer to store encoded data before it is sent as one datagram.

  - ### Method Detail

    - #### beginEncoding

          public void beginEncoding​(java.net.InetAddress receiverAddress,
                                    int receiverPort)
                             throws OncRpcException,
                                    java.io.IOException

      Begins encoding a new XDR record. This involves resetting this encoding XDR stream back into a known state.
      Overrides:
        `beginEncoding` in class `XdrEncodingStream`
      Parameters:
        `receiverAddress` - Indicates the receiver of the XDR data. This can be `null` for XDR streams connected permanently to a receiver (like in case of TCP/IP based XDR streams).
        `receiverPort` - Port number of the receiver.
      Throws:
        `OncRpcException` - if an ONC/RPC error occurs.
        `java.io.IOException` - if an I/O error occurs.

    - #### endEncoding

          public void endEncoding()
                           throws OncRpcException,
                                  java.io.IOException

      Flushes this encoding XDR stream and forces any buffered output bytes to be written out. The general contract of `endEncoding` is that calling it is an indication that the current record is finished and any bytes previously encoded should immediately be written to their intended destination.
      Overrides:
        `endEncoding` in class `XdrEncodingStream`
      Throws:
        `OncRpcException` - if an ONC/RPC error occurs.
        `java.io.IOException` - if an I/O error occurs.

    - #### close

          public void close()
                     throws OncRpcException,
                            java.io.IOException

      Closes this encoding XDR stream and releases any system resources associated with this stream. The general contract of `close` is that it closes the encoding XDR stream. A closed XDR stream cannot perform encoding operations and cannot be reopened.
      Overrides:
        `close` in class `XdrEncodingStream`
      Throws:
        `OncRpcException` - if an ONC/RPC error occurs.
        `java.io.IOException` - if an I/O error occurs.

    - #### xdrEncodeInt

          public void xdrEncodeInt​(int value)
                            throws OncRpcException,
                                   java.io.IOException

      Encodes (aka "serializes") a "XDR int" value and writes it down a XDR stream. A XDR int is 32 bits wide -- the same width Java's "int" data type has. This method is one of the basic methods all other methods can rely on.
      Specified by:
        `xdrEncodeInt` in class `XdrEncodingStream`
      Parameters:
        `value` - The int value to be encoded.
      Throws:
        `OncRpcException` - if an ONC/RPC error occurs.
        `java.io.IOException` - if an I/O error occurs.

    - #### xdrEncodeOpaque

          public void xdrEncodeOpaque​(byte[] value,
                                      int offset,
                                      int length)
                               throws OncRpcException,
                                      java.io.IOException

      Encodes (aka "serializes") a XDR opaque value, which is represented by a vector of byte values, and starts at `offset` with a length of `length`. Only the opaque value is encoded, but no length indication is preceeding the opaque value, so the receiver has to know how long the opaque value will be. The encoded data is always padded to be a multiple of four. If the given length is not a multiple of four, zero bytes will be used for padding.
      Specified by:
        `xdrEncodeOpaque` in class `XdrEncodingStream`
      Parameters:
        `value` - The opaque value to be encoded in the form of a series of bytes.
        `offset` - Start offset in the data.
        `length` - the number of bytes to encode.
      Throws:
        `OncRpcException` - if an ONC/RPC error occurs.
        `java.io.IOException` - if an I/O error occurs.