com.dyuproject.protostuff
Class ByteArrayInput

java.lang.Object
  extended by com.dyuproject.protostuff.ByteArrayInput
All Implemented Interfaces:
Input

public final class ByteArrayInput
extends java.lang.Object
implements Input

Reads and decodes protocol buffer message fields from an internal byte array buffer. This object is re-usable via doing a reset on the byte array position and length. This is used internally by IOUtil where it catches ArrayIndexOutOfBoundsException when a message is truncated.

Author:
David Yu
Date created:
Jun 22, 2010

Field Summary
 boolean decodeNestedMessageAsGroup
          If true, the nested messages are group-encoded
 
Constructor Summary
ByteArrayInput(byte[] buffer, boolean decodeNestedMessageAsGroup)
           
ByteArrayInput(byte[] buffer, int offset, int len, boolean decodeNestedMessageAsGroup)
           
 
Method Summary
 void checkLastTagWas(int value)
          Verifies that the last call to readTag() returned the given tag value.
 int currentLimit()
          Returns the current limit (the end index).
 int currentOffset()
          Returns the current offset (the position).
 int getLastTag()
          Returns the last tag.
<T> void
handleUnknownField(int fieldNumber, Schema<T> schema)
           
<T> T
mergeObject(T value, Schema<T> schema)
           
 boolean readBool()
          Read a bool field value from the internal buffer.
 byte[] readByteArray()
           
 ByteString readBytes()
           
 double readDouble()
          Read a double field value from the internal buffer.
 int readEnum()
          Read an enum field value from the internal buffer.
<T> int
readFieldNumber(Schema<T> schema)
           
 int readFixed32()
          Read a fixed32 field value from the internal buffer.
 long readFixed64()
          Read a fixed64 field value from the internal buffer.
 float readFloat()
          Read a float field value from the internal buffer.
 int readInt32()
          Read an int32 field value from the internal buffer.
 long readInt64()
          Read an int64 field value from the internal buffer.
 int readRawLittleEndian32()
          Read a 32-bit little-endian integer from the internal buffer.
 long readRawLittleEndian64()
          Read a 64-bit little-endian integer from the internal byte buffer.
 int readRawVarint32()
          Reads a var int 32 from the internal byte buffer.
 long readRawVarint64()
          Reads a var int 64 from the internal byte buffer.
 int readSFixed32()
          Read an sfixed32 field value from the internal buffer.
 long readSFixed64()
          Read an sfixed64 field value from the internal buffer.
 int readSInt32()
          Read an sint32 field value from the internal buffer.
 long readSInt64()
          Read an sint64 field value from the internal buffer.
 java.lang.String readString()
           
 int readTag()
          Attempt to read a field tag, returning zero if we have reached EOF.
 int readUInt32()
          Read a uint32 field value from the internal buffer.
 long readUInt64()
          Read a uint64 field value from the internal buffer.
 ByteArrayInput reset(int offset, int len)
          Resets the offset and the limit of the internal buffer.
 boolean skipField(int tag)
          Reads and discards a single field, given its tag value.
 void skipMessage()
          Reads and discards an entire message.
 void transferByteRangeTo(Output output, boolean utf8String, int fieldNumber, boolean repeated)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

decodeNestedMessageAsGroup

public final boolean decodeNestedMessageAsGroup
If true, the nested messages are group-encoded

Constructor Detail

ByteArrayInput

public ByteArrayInput(byte[] buffer,
                      boolean decodeNestedMessageAsGroup)

ByteArrayInput

public ByteArrayInput(byte[] buffer,
                      int offset,
                      int len,
                      boolean decodeNestedMessageAsGroup)
Method Detail

reset

public ByteArrayInput reset(int offset,
                            int len)
Resets the offset and the limit of the internal buffer.


currentOffset

public int currentOffset()
Returns the current offset (the position).


currentLimit

public int currentLimit()
Returns the current limit (the end index).


getLastTag

public int getLastTag()
Returns the last tag.


readTag

public int readTag()
            throws java.io.IOException
Attempt to read a field tag, returning zero if we have reached EOF. Protocol message parsers use this to read tags, since a protocol message may legally end wherever a tag occurs, and zero is not a valid tag number.

Throws:
java.io.IOException

checkLastTagWas

public void checkLastTagWas(int value)
                     throws ProtobufException
Verifies that the last call to readTag() returned the given tag value. This is used to verify that a nested group ended with the correct end tag.

Throws:
ProtobufException - value does not match the last tag.

skipField

public boolean skipField(int tag)
                  throws java.io.IOException
Reads and discards a single field, given its tag value.

Returns:
false if the tag is an endgroup tag, in which case nothing is skipped. Otherwise, returns true.
Throws:
java.io.IOException

skipMessage

public void skipMessage()
                 throws java.io.IOException
Reads and discards an entire message. This will read either until EOF or until an endgroup tag, whichever comes first.

Throws:
java.io.IOException

handleUnknownField

public <T> void handleUnknownField(int fieldNumber,
                                   Schema<T> schema)
                        throws java.io.IOException
Specified by:
handleUnknownField in interface Input
Throws:
java.io.IOException

readFieldNumber

public <T> int readFieldNumber(Schema<T> schema)
                    throws java.io.IOException
Specified by:
readFieldNumber in interface Input
Throws:
java.io.IOException

readDouble

public double readDouble()
                  throws java.io.IOException
Read a double field value from the internal buffer.

Specified by:
readDouble in interface Input
Throws:
java.io.IOException

readFloat

public float readFloat()
                throws java.io.IOException
Read a float field value from the internal buffer.

Specified by:
readFloat in interface Input
Throws:
java.io.IOException

readUInt64

public long readUInt64()
                throws java.io.IOException
Read a uint64 field value from the internal buffer.

Specified by:
readUInt64 in interface Input
Throws:
java.io.IOException

readInt64

public long readInt64()
               throws java.io.IOException
Read an int64 field value from the internal buffer.

Specified by:
readInt64 in interface Input
Throws:
java.io.IOException

readInt32

public int readInt32()
              throws java.io.IOException
Read an int32 field value from the internal buffer.

Specified by:
readInt32 in interface Input
Throws:
java.io.IOException

readFixed64

public long readFixed64()
                 throws java.io.IOException
Read a fixed64 field value from the internal buffer.

Specified by:
readFixed64 in interface Input
Throws:
java.io.IOException

readFixed32

public int readFixed32()
                throws java.io.IOException
Read a fixed32 field value from the internal buffer.

Specified by:
readFixed32 in interface Input
Throws:
java.io.IOException

readBool

public boolean readBool()
                 throws java.io.IOException
Read a bool field value from the internal buffer.

Specified by:
readBool in interface Input
Throws:
java.io.IOException

readUInt32

public int readUInt32()
               throws java.io.IOException
Read a uint32 field value from the internal buffer.

Specified by:
readUInt32 in interface Input
Throws:
java.io.IOException

readEnum

public int readEnum()
             throws java.io.IOException
Read an enum field value from the internal buffer. Caller is responsible for converting the numeric value to an actual enum.

Specified by:
readEnum in interface Input
Throws:
java.io.IOException

readSFixed32

public int readSFixed32()
                 throws java.io.IOException
Read an sfixed32 field value from the internal buffer.

Specified by:
readSFixed32 in interface Input
Throws:
java.io.IOException

readSFixed64

public long readSFixed64()
                  throws java.io.IOException
Read an sfixed64 field value from the internal buffer.

Specified by:
readSFixed64 in interface Input
Throws:
java.io.IOException

readSInt32

public int readSInt32()
               throws java.io.IOException
Read an sint32 field value from the internal buffer.

Specified by:
readSInt32 in interface Input
Throws:
java.io.IOException

readSInt64

public long readSInt64()
                throws java.io.IOException
Read an sint64 field value from the internal buffer.

Specified by:
readSInt64 in interface Input
Throws:
java.io.IOException

readString

public java.lang.String readString()
                            throws java.io.IOException
Specified by:
readString in interface Input
Throws:
java.io.IOException

readBytes

public ByteString readBytes()
                     throws java.io.IOException
Specified by:
readBytes in interface Input
Throws:
java.io.IOException

readByteArray

public byte[] readByteArray()
                     throws java.io.IOException
Specified by:
readByteArray in interface Input
Throws:
java.io.IOException

mergeObject

public <T> T mergeObject(T value,
                         Schema<T> schema)
              throws java.io.IOException
Specified by:
mergeObject in interface Input
Throws:
java.io.IOException

readRawVarint32

public int readRawVarint32()
                    throws java.io.IOException
Reads a var int 32 from the internal byte buffer.

Throws:
java.io.IOException

readRawVarint64

public long readRawVarint64()
                     throws java.io.IOException
Reads a var int 64 from the internal byte buffer.

Throws:
java.io.IOException

readRawLittleEndian32

public int readRawLittleEndian32()
                          throws java.io.IOException
Read a 32-bit little-endian integer from the internal buffer.

Throws:
java.io.IOException

readRawLittleEndian64

public long readRawLittleEndian64()
                           throws java.io.IOException
Read a 64-bit little-endian integer from the internal byte buffer.

Throws:
java.io.IOException

transferByteRangeTo

public void transferByteRangeTo(Output output,
                                boolean utf8String,
                                int fieldNumber,
                                boolean repeated)
                         throws java.io.IOException
Specified by:
transferByteRangeTo in interface Input
Throws:
java.io.IOException


Copyright © 2009-2014. All Rights Reserved.