Package org.acplt.oncrpc

# Class XdrBufferDecodingStream

java.lang.Object
org.acplt.oncrpc.XdrDecodingStream
org.acplt.oncrpc.XdrBufferDecodingStream

public class XdrBufferDecodingStream extends XdrDecodingStream
The `XdrBufferDecodingStream` class provides the necessary functionality to `XdrDecodingStream` to retrieve XDR packets from a byte buffer.

Version:
  $Revision: 1.2 $ $Date: 2005/11/11 21:06:36 $ $State: Exp $ $Locker: $
Author:
  Harald Albrecht

## Constructor Summary

Constructors
Constructor
Description
`XdrBufferDecodingStream(byte[] buffer)`
Construct a new `XdrUdpDecodingStream` object and associate it with a buffer containing encoded XDR data.
`XdrBufferDecodingStream(byte[] buffer, int encodedLength)`
Construct a new `XdrUdpDecodingStream` object and associate it with a buffer containing encoded XDR data.

## Method Summary

Modifier and Type
Method
Description
`void`
`beginDecoding()`
Initiates decoding of the next XDR record.
`void`
`close()`
Closes this decoding XDR stream and releases any system resources associated with this stream.
`void`
`endDecoding()`
End decoding of the current XDR record.
`InetAddress`
`getSenderAddress()`
Returns the Internet address of the sender of the current XDR data.
`int`
`getSenderPort()`
Returns the port number of the sender of the current XDR data.
`void`
`setXdrData(byte[] buffer, int encodedLength)`
Sets the buffer containing encoded XDR data as well as the length of the encoded data.
`int`
`xdrDecodeInt()`
Decodes (aka "deserializes") a "XDR int" value received from a XDR stream.
`void`
`xdrDecodeOpaque(byte[] opaque, int offset, int length)`
Decodes (aka "deserializes") a XDR opaque value, which is represented by a vector of byte values, and starts at `offset` with a length of `length`.
`byte[]`
`xdrDecodeOpaque(int length)`
Decodes (aka "deserializes") an opaque value, which is nothing more than a series of octets (or 8 bits wide bytes).

### Methods inherited from class org.acplt.oncrpc.XdrDecodingStream

`getCharacterEncoding, setCharacterEncoding, xdrDecodeBoolean, xdrDecodeBooleanFixedVector, xdrDecodeBooleanVector, xdrDecodeByte, xdrDecodeByteFixedVector, xdrDecodeByteVector, xdrDecodeDouble, xdrDecodeDoubleFixedVector, xdrDecodeDoubleVector, xdrDecodeDynamicOpaque, xdrDecodeFloat, xdrDecodeFloatFixedVector, xdrDecodeFloatVector, xdrDecodeIntFixedVector, xdrDecodeIntVector, xdrDecodeLong, xdrDecodeLongFixedVector, xdrDecodeLongVector, xdrDecodeOpaque, xdrDecodeShort, xdrDecodeShortFixedVector, xdrDecodeShortVector, xdrDecodeString, xdrDecodeStringFixedVector, xdrDecodeStringVector`

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

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

## Constructor Details

### XdrBufferDecodingStream

public XdrBufferDecodingStream(byte[] buffer, int encodedLength)
Construct a new `XdrUdpDecodingStream` object and associate it with a buffer containing encoded XDR data.

Parameters:
  `buffer` - Buffer containing encoded XDR data.
  `encodedLength` - Length of encoded XDR data within the buffer.
Throws:
  `IllegalArgumentException` - if `encodedLength` is not a multiple of four.

### XdrBufferDecodingStream

public XdrBufferDecodingStream(byte[] buffer)
Construct a new `XdrUdpDecodingStream` object and associate it with a buffer containing encoded XDR data.

Parameters:
  `buffer` - Buffer containing encoded XDR data.
Throws:
  `IllegalArgumentException` - if the size of the buffer is not a multiple of four.

## Method Details

### setXdrData

public void setXdrData(byte[] buffer, int encodedLength)
Sets the buffer containing encoded XDR data as well as the length of the encoded data.

Parameters:
  `buffer` - Buffer containing encoded XDR data.
  `encodedLength` - Length of encoded XDR data within the buffer.
Throws:
  `IllegalArgumentException` - if `encodedLength` is not a multiple of four.

### getSenderAddress

public InetAddress getSenderAddress()
Returns the Internet address of the sender of the current XDR data. This method should only be called after `beginDecoding()`, otherwise it might return stale information.

Specified by:
  `getSenderAddress` in class `XdrDecodingStream`
Returns:
  InetAddress of the sender of the current XDR data.

### getSenderPort

public int getSenderPort()
Returns the port number of the sender of the current XDR data. This method should only be called after `beginDecoding()`, otherwise it might return stale information.

Specified by:
  `getSenderPort` in class `XdrDecodingStream`
Returns:
  Port number of the sender of the current XDR data.

### beginDecoding

public void beginDecoding() throws OncRpcException, IOException
Initiates decoding of the next XDR record.

Specified by:
  `beginDecoding` in class `XdrDecodingStream`
Throws:
  `OncRpcException` - if an ONC/RPC error occurs.
  `IOException` - if an I/O error occurs.

### endDecoding

public void endDecoding() throws OncRpcException, IOException
End decoding of the current XDR record. The general contract of `endDecoding` is that calling it is an indication that the current record is no more interesting to the caller and any allocated data for this record can be freed.

This method overrides `XdrDecodingStream.endDecoding()`. It does nothing more than resetting the buffer pointer (eeek! a pointer in Java!!!) back to the begin of an empty buffer, so attempts to decode data will fail until the buffer is filled again.

Overrides:
  `endDecoding` in class `XdrDecodingStream`
Throws:
  `OncRpcException` - if an ONC/RPC error occurs.
  `IOException` - if an I/O error occurs.

### close

public void close() throws OncRpcException, IOException
Closes this decoding XDR stream and releases any system resources associated with this stream. A closed XDR stream cannot perform decoding operations and cannot be reopened.

This implementation frees the allocated buffer.

Overrides:
  `close` in class `XdrDecodingStream`
Throws:
  `OncRpcException` - if an ONC/RPC error occurs.
  `IOException` - if an I/O error occurs.

### xdrDecodeInt

public int xdrDecodeInt() throws OncRpcException, IOException
Decodes (aka "deserializes") a "XDR int" value received from a XDR stream. A XDR int is 32 bits wide -- the same width Java's "int" data type has.

Specified by:
  `xdrDecodeInt` in class `XdrDecodingStream`
Returns:
  The decoded int value.
Throws:
  `OncRpcException` - if an ONC/RPC error occurs.
  `IOException` - if an I/O error occurs.

### xdrDecodeOpaque

public byte[] xdrDecodeOpaque(int length) throws OncRpcException, IOException
Decodes (aka "deserializes") an opaque value, which is nothing more than a series of octets (or 8 bits wide bytes). Because the length of the opaque value is given, we don't need to retrieve it from the XDR stream. This is different from `xdrDecodeOpaque(byte[], int, int)` where first the length of the opaque value is retrieved from the XDR stream.

Specified by:
  `xdrDecodeOpaque` in class `XdrDecodingStream`
Parameters:
  `length` - Length of opaque data to decode.
Returns:
  Opaque data as a byte vector.
Throws:
  `OncRpcException` - if an ONC/RPC error occurs.
  `IOException` - if an I/O error occurs.

### xdrDecodeOpaque

public void xdrDecodeOpaque(byte[] opaque, int offset, int length) throws OncRpcException, IOException
Decodes (aka "deserializes") 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 decoded, so the caller has to know how long the opaque value will be. The decoded data is always padded to be a multiple of four (because that's what the sender does).

Specified by:
  `xdrDecodeOpaque` in class `XdrDecodingStream`
Parameters:
  `opaque` - Byte vector which will receive the decoded opaque value.
  `offset` - Start offset in the byte vector.
  `length` - the number of bytes to decode.
Throws:
  `OncRpcException` - if an ONC/RPC error occurs.
  `IOException` - if an I/O error occurs.