# Class ObjectReader

java.lang.Object
org.apache.catalina.tribes.io.ObjectReader

public class ObjectReader extends Object
The object reader object is an object used in conjunction with java.nio TCP messages. This object stores the message bytes in a `XByteBuffer` until a full package has been received. This object uses an XByteBuffer which is an extendable object buffer that also allows for message encoding and decoding.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected boolean`
  `accessed`
  Whether this reader is currently being accessed.
  `protected long`
  `lastAccess`
  Timestamp of the last access.
  `protected static final StringManager`
  `sm`
  String manager for internationalization.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ObjectReader(int packetSize)`
  Creates an ObjectReader with the specified packet size.
  `ObjectReader(Socket socket)`
  Creates an `ObjectReader` for a TCP socket
  `ObjectReader(SocketChannel channel)`
  Creates an `ObjectReader` for a TCP NIO socket channel

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `access()`
  Marks this reader as being accessed.
  `int`
  `append(byte[] data, int off, int len, boolean count)`
  Appends new bytes to the buffer.
  `int`
  `append(ByteBuffer data, int len, boolean count)`
  Append new bytes to buffer.
  `int`
  `bufferSize()`
  Returns the current buffer size.
  `void`
  `close()`
  Closes this reader and releases the buffer.
  `int`
  `count()`
  Returns the number of packages that the reader has read
  `ChannelMessage[]`
  `execute()`
  Send buffer to cluster listener (callback).
  `void`
  `finish()`
  Marks this reader as no longer being accessed.
  `long`
  `getLastAccess()`
  Returns the timestamp of the last access.
  `boolean`
  `hasPackage()`
  Checks if there is a complete package available.
  `boolean`
  `isAccessed()`
  Checks if this reader is currently being accessed.
  `boolean`
  `isCancelled()`
  Checks if this reader has been cancelled.
  `void`
  `setCancelled(boolean cancelled)`
  Sets the cancelled state of this reader.
  `void`
  `setLastAccess(long lastAccess)`
  Sets the timestamp of the last access.

  ### Methods inherited from class Object

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

- ## Field Details

  - ### sm

    protected static final StringManager sm
    String manager for internationalization.

  - ### lastAccess

    protected long lastAccess
    Timestamp of the last access.

  - ### accessed

    protected boolean accessed
    Whether this reader is currently being accessed.

- ## Constructor Details

  - ### ObjectReader

    public ObjectReader(int packetSize)
    Creates an ObjectReader with the specified packet size.
    Parameters:
      `packetSize` - The initial packet buffer size

  - ### ObjectReader

    public ObjectReader(SocketChannel channel)
    Creates an `ObjectReader` for a TCP NIO socket channel
    Parameters:
      `channel` - - the channel to be read.

  - ### ObjectReader

    public ObjectReader(Socket socket)
    Creates an `ObjectReader` for a TCP socket
    Parameters:
      `socket` - Socket

- ## Method Details

  - ### access

    public void access()
    Marks this reader as being accessed.

  - ### finish

    public void finish()
    Marks this reader as no longer being accessed.

  - ### isAccessed

    public boolean isAccessed()
    Checks if this reader is currently being accessed.
    Returns:
      true if the reader is being accessed

  - ### append

    public int append(ByteBuffer data, int len, boolean count)
    Append new bytes to buffer.
    Parameters:
      `data` - new transfer buffer
      `len` - length in buffer
      `count` - whether to return the count
    Returns:
      number of messages that was sent to callback (or -1 if count == false)
    See Also:
      - `XByteBuffer.countPackages()`

  - ### append

    public int append(byte[] data, int off, int len, boolean count)
    Appends new bytes to the buffer.
    Parameters:
      `data` - The byte array
      `off` - The offset in the array
      `len` - The length of data
      `count` - Whether to count packages
    Returns:
      Number of messages sent to callback, or -1 if count is false

  - ### execute

    public ChannelMessage[] execute()
    Send buffer to cluster listener (callback). Is message complete receiver send message to callback?
    Returns:
      array of received packages/messages
    See Also:
      - `ReceiverBase.messageDataReceived(ChannelMessage)`
      - `XByteBuffer.doesPackageExist()`
      - `XByteBuffer.extractPackage(boolean)`

  - ### bufferSize

    public int bufferSize()
    Returns the current buffer size.
    Returns:
      The buffer length

  - ### hasPackage

    public boolean hasPackage()
    Checks if there is a complete package available.
    Returns:
      true if a complete package exists

  - ### count

    public int count()
    Returns the number of packages that the reader has read
    Returns:
      int

  - ### close

    public void close()
    Closes this reader and releases the buffer.

  - ### getLastAccess

    public long getLastAccess()
    Returns the timestamp of the last access.
    Returns:
      The last access timestamp

  - ### isCancelled

    public boolean isCancelled()
    Checks if this reader has been cancelled.
    Returns:
      true if cancelled

  - ### setLastAccess

    public void setLastAccess(long lastAccess)
    Sets the timestamp of the last access.
    Parameters:
      `lastAccess` - The last access timestamp

  - ### setCancelled

    public void setCancelled(boolean cancelled)
    Sets the cancelled state of this reader.
    Parameters:
      `cancelled` - The cancelled state