Class XdrBufferEncodingStream

java.lang.Object
org.acplt.oncrpc.XdrEncodingStream
org.acplt.oncrpc.XdrBufferEncodingStream

public class XdrBufferEncodingStream extends XdrEncodingStream
The XdrBufferEncodingStream class provides a buffer-based XDR stream.
Version:
$Revision: 1.2 $ $Date: 2003/08/14 11:26:50 $ $State: Exp $ $Locker: $
Author:
Harald Albrecht
  • Field Details

    • 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 Details

    • XdrBufferEncodingStream

      public XdrBufferEncodingStream(int bufferSize)
      Constructs a new XdrBufferEncodingStream with a buffer to encode data into of the given size.
      Parameters:
      bufferSize - Size of buffer to store encoded data in.
    • XdrBufferEncodingStream

      public XdrBufferEncodingStream(byte[] buffer)
      Constructs a new XdrBufferEncodingStream with a given buffer.
      Parameters:
      buffer - Buffer to store encoded information in.
      Throws:
      IllegalArgumentException - if encodedLength is not a multiple of four.
  • Method Details

    • getXdrLength

      public int getXdrLength()
      Returns the amount of encoded data in the buffer.
      Returns:
      length of data encoded in buffer.
    • getXdrData

      public byte[] getXdrData()
      Returns the buffer holding encoded data.
      Returns:
      Buffer with encoded data.
    • beginEncoding

      public void beginEncoding(InetAddress receiverAddress, int receiverPort) throws OncRpcException, 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.
      IOException - if an I/O error occurs.
    • endEncoding

      public void endEncoding() throws OncRpcException, 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.
      IOException - if an I/O error occurs.
    • close

      public void close() throws OncRpcException, 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.
      IOException - if an I/O error occurs.
    • xdrEncodeInt

      public void xdrEncodeInt(int value) throws OncRpcException, 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.
      IOException - if an I/O error occurs.
    • xdrEncodeOpaque

      public void xdrEncodeOpaque(byte[] value, int offset, int length) throws OncRpcException, 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.
      IOException - if an I/O error occurs.