ostore.util
Class ByteArrayInputBuffer

java.lang.Object
  |
  +--ostore.util.InputBufferImpl
        |
        +--ostore.util.ByteArrayInputBuffer
All Implemented Interfaces:
Cloneable, InputBuffer

public class ByteArrayInputBuffer
extends InputBufferImpl

The ByteArrayInputBuffer is a utility class that provides an InputBuffer interface to a byte array. It can also provide provide the interface over only a portion of the array.

Version:
$Id: ByteArrayInputBuffer.java,v 1.6 2003/10/03 16:51:05 srhea Exp $
Author:
Patrick R. Eaton, Jeff Pang

Constructor Summary
ByteArrayInputBuffer()
           
ByteArrayInputBuffer(byte[] data)
           
ByteArrayInputBuffer(byte[] data, int offset, int length)
           
 
Method Summary
 int bytesRemaining()
          Return the number of bytes remaining in the buffer.
 Object clone()
          Buffers must support clone such that the read pointer on a cloned buffer is independent of the original.
 int getOffset()
          Returns the current offset into the original array
 byte nextByte()
          Read the next byte out of the buffer.
 void nextBytes(byte[] output, int offset, int length)
          Read the next length bytes out the of the buffer, and place them in the array output, starting at index offset.
 void nextBytes(OutputBuffer buffer)
          Write all of the remaining bytes in this input buffer into the given output buffer.
 void reset(byte[] data)
          Reuse the buffer with a new array of bytes.
 void reset(byte[] data, int offset, int length)
          Reuse the buffer with a new array of bytes.
 void skipBytes(int length)
           
 InputBuffer subBuffer(int length)
          Create a new input buffer from the read point at this one, containing the next length bytes.
 
Methods inherited from class ostore.util.InputBufferImpl
nextBigInteger, nextBigInteger, nextBoolean, nextBoolean, nextDouble, nextDouble, nextInt, nextInt, nextLong, nextLong, nextObject, nextObject, nextShort, nextShort, nextString, nextString
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ByteArrayInputBuffer

public ByteArrayInputBuffer()

ByteArrayInputBuffer

public ByteArrayInputBuffer(byte[] data)

ByteArrayInputBuffer

public ByteArrayInputBuffer(byte[] data,
                            int offset,
                            int length)
Method Detail

nextByte

public byte nextByte()
Description copied from interface: InputBuffer
Read the next byte out of the buffer.


nextBytes

public void nextBytes(byte[] output,
                      int offset,
                      int length)
Description copied from interface: InputBuffer
Read the next length bytes out the of the buffer, and place them in the array output, starting at index offset.

Parameters:
output - the array into which the bytes are written
offset - the index in output at which we start writing bytes
length - the number of bytes to read

nextBytes

public void nextBytes(OutputBuffer buffer)
Description copied from interface: InputBuffer
Write all of the remaining bytes in this input buffer into the given output buffer. We need something like this so that (for example) the payload of an RouteMsg doesn't have to be deserialized on an intermediate node in its path. I'm not entirely happy with the idea, though, so please don't use it for now without talking to me first about what you're using it for.

Parameters:
buffer - the output buffer into which the bytes are written

skipBytes

public void skipBytes(int length)

subBuffer

public InputBuffer subBuffer(int length)
Description copied from interface: InputBuffer
Create a new input buffer from the read point at this one, containing the next length bytes. Subject to change in the future.


getOffset

public int getOffset()
Returns the current offset into the original array


bytesRemaining

public int bytesRemaining()
Return the number of bytes remaining in the buffer.


reset

public void reset(byte[] data)
Reuse the buffer with a new array of bytes.


reset

public void reset(byte[] data,
                  int offset,
                  int length)
Reuse the buffer with a new array of bytes.


clone

public Object clone()
             throws CloneNotSupportedException
Description copied from interface: InputBuffer
Buffers must support clone such that the read pointer on a cloned buffer is independent of the original. This functionality is used in Tapestry and will be used in SignedQS as well, I think. It relates to the need to deserialize a buffer twice. Whether or not we keep using it is subject to change.

Specified by:
clone in interface InputBuffer
Overrides:
clone in class InputBufferImpl
CloneNotSupportedException