Class BinaryReader.SafeHeapReader

java.lang.Object
com.google.protobuf.BinaryReader
com.google.protobuf.BinaryReader.SafeHeapReader
All Implemented Interfaces:
Reader
Enclosing class:
BinaryReader

private static final class BinaryReader.SafeHeapReader extends BinaryReader
A BinaryReader implementation that operates on a heap ByteBuffer. Uses only safe operations on the underlying array.
  • Field Details

    • bufferIsImmutable

      private final boolean bufferIsImmutable
    • buffer

      private final byte[] buffer
    • pos

      private int pos
    • initialPos

      private final int initialPos
    • limit

      private int limit
    • tag

      private int tag
    • endGroupTag

      private int endGroupTag
  • Constructor Details

    • SafeHeapReader

      public SafeHeapReader(ByteBuffer bytebuf, boolean bufferIsImmutable)
  • Method Details

    • isAtEnd

      private boolean isAtEnd()
    • getTotalBytesRead

      public int getTotalBytesRead()
      Description copied from class: BinaryReader
      Returns the total number of bytes read so far from the input buffer.
      Specified by:
      getTotalBytesRead in class BinaryReader
    • getFieldNumber

      public int getFieldNumber() throws IOException
      Description copied from interface: Reader
      Gets the field number for the current field being read.

      TODO: Rename it to make it more explicit about the side effect on the underlying buffer.

      Returns:
      the current field number or Reader.READ_DONE if the end of input has been reached.
      Throws:
      IOException
    • getTag

      public int getTag()
      Description copied from interface: Reader
      Gets the wire tag of the current field.
      Returns:
      the current wire tag or Reader.TAG_UNKNOWN if the reader does not know the tag of the current field.
    • skipField

      public boolean skipField() throws IOException
      Description copied from interface: Reader
      Skips the current field and advances the reader to the next field.
      Returns:
      true if there are more fields or false if the end of input has been reached.
      Throws:
      IOException
    • readDouble

      public double readDouble() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type DOUBLE and advances the reader to the next field.
      Throws:
      IOException
    • readFloat

      public float readFloat() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type FLOAT and advances the reader to the next field.
      Throws:
      IOException
    • readUInt64

      public long readUInt64() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type UINT64 and advances the reader to the next field.
      Throws:
      IOException
    • readInt64

      public long readInt64() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type INT64 and advances the reader to the next field.
      Throws:
      IOException
    • readInt32

      public int readInt32() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type INT32 and advances the reader to the next field.
      Throws:
      IOException
    • readFixed64

      public long readFixed64() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type FIXED64 and advances the reader to the next field.
      Throws:
      IOException
    • readFixed32

      public int readFixed32() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type FIXED32 and advances the reader to the next field.
      Throws:
      IOException
    • readBool

      public boolean readBool() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type BOOL and advances the reader to the next field.
      Throws:
      IOException
    • readString

      public String readString() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type STRING and advances the reader to the next field. If the stream contains malformed UTF-8, replace the offending bytes with the standard UTF-8 replacement character.
      Throws:
      IOException
    • readStringRequireUtf8

      public String readStringRequireUtf8() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type STRING and advances the reader to the next field. If the stream contains malformed UTF-8, throw exception InvalidProtocolBufferException.
      Throws:
      IOException
    • readStringInternal

      public String readStringInternal(boolean requireUtf8) throws IOException
      Throws:
      IOException
    • readMessage

      public <T> T readMessage(Class<T> clazz, ExtensionRegistryLite extensionRegistry) throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type MESSAGE and advances the reader to the next field.
      Throws:
      IOException
    • readMessageBySchemaWithCheck

      public <T> T readMessageBySchemaWithCheck(Schema<T> schema, ExtensionRegistryLite extensionRegistry) throws IOException
      Throws:
      IOException
    • readMessage

      private <T> T readMessage(Schema<T> schema, ExtensionRegistryLite extensionRegistry) throws IOException
      Throws:
      IOException
    • mergeMessageField

      public <T> void mergeMessageField(T target, Schema<T> schema, ExtensionRegistryLite extensionRegistry) throws IOException
      Description copied from interface: Reader
      Read a message field from the wire format and merge the results into the given target.
      Throws:
      IOException
    • readGroup

      @Deprecated public <T> T readGroup(Class<T> clazz, ExtensionRegistryLite extensionRegistry) throws IOException
      Deprecated.
      Description copied from interface: Reader
      Reads and returns the next field of type GROUP and advances the reader to the next field.
      Throws:
      IOException
    • readGroupBySchemaWithCheck

      @Deprecated public <T> T readGroupBySchemaWithCheck(Schema<T> schema, ExtensionRegistryLite extensionRegistry) throws IOException
      Deprecated.
      Throws:
      IOException
    • readGroup

      private <T> T readGroup(Schema<T> schema, ExtensionRegistryLite extensionRegistry) throws IOException
      Throws:
      IOException
    • mergeGroupField

      public <T> void mergeGroupField(T target, Schema<T> schema, ExtensionRegistryLite extensionRegistry) throws IOException
      Description copied from interface: Reader
      Read a group field from the wire format and merge the results into the given target.
      Throws:
      IOException
    • readBytes

      public ByteString readBytes() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type BYTES and advances the reader to the next field.
      Throws:
      IOException
    • readUInt32

      public int readUInt32() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type UINT32 and advances the reader to the next field.
      Throws:
      IOException
    • readEnum

      public int readEnum() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type ENUM and advances the reader to the next field.
      Throws:
      IOException
    • readSFixed32

      public int readSFixed32() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type SFIXED32 and advances the reader to the next field.
      Throws:
      IOException
    • readSFixed64

      public long readSFixed64() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type SFIXED64 and advances the reader to the next field.
      Throws:
      IOException
    • readSInt32

      public int readSInt32() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type SINT32 and advances the reader to the next field.
      Throws:
      IOException
    • readSInt64

      public long readSInt64() throws IOException
      Description copied from interface: Reader
      Reads and returns the next field of type SINT64 and advances the reader to the next field.
      Throws:
      IOException
    • readDoubleList

      public void readDoubleList(List<Double> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type DOUBLE_LIST or DOUBLE_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readFloatList

      public void readFloatList(List<Float> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type FLOAT_LIST or FLOAT_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readUInt64List

      public void readUInt64List(List<Long> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type UINT64_LIST or UINT64_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readInt64List

      public void readInt64List(List<Long> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type INT64_LIST or INT64_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readInt32List

      public void readInt32List(List<Integer> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type INT32_LIST or INT32_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readFixed64List

      public void readFixed64List(List<Long> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type FIXED64_LIST or FIXED64_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readFixed32List

      public void readFixed32List(List<Integer> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type FIXED32_LIST or FIXED32_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readBoolList

      public void readBoolList(List<Boolean> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type BOOL_LIST or BOOL_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readStringList

      public void readStringList(List<String> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type STRING_LIST and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readStringListRequireUtf8

      public void readStringListRequireUtf8(List<String> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type STRING_LIST and advances the reader to the next field. If the stream contains malformed UTF-8, throw exception InvalidProtocolBufferException.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readStringListInternal

      public void readStringListInternal(List<String> target, boolean requireUtf8) throws IOException
      Throws:
      IOException
    • readMessageList

      public <T> void readMessageList(List<T> target, Class<T> targetType, ExtensionRegistryLite extensionRegistry) throws IOException
      Throws:
      IOException
    • readMessageList

      public <T> void readMessageList(List<T> target, Schema<T> schema, ExtensionRegistryLite extensionRegistry) throws IOException
      Description copied from interface: Reader
      Reads the next field of type MESSAGE_LIST and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readGroupList

      @Deprecated public <T> void readGroupList(List<T> target, Class<T> targetType, ExtensionRegistryLite extensionRegistry) throws IOException
      Deprecated.
      Description copied from interface: Reader
      Reads the next field of type GROUP_LIST and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      targetType - the type of the elements stored in the target list.
      Throws:
      IOException
    • readGroupList

      @Deprecated public <T> void readGroupList(List<T> target, Schema<T> schema, ExtensionRegistryLite extensionRegistry) throws IOException
      Deprecated.
      Throws:
      IOException
    • readBytesList

      public void readBytesList(List<ByteString> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type BYTES_LIST and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readUInt32List

      public void readUInt32List(List<Integer> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type UINT32_LIST or UINT32_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readEnumList

      public void readEnumList(List<Integer> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type ENUM_LIST or ENUM_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readSFixed32List

      public void readSFixed32List(List<Integer> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type SFIXED32_LIST or SFIXED32_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readSFixed64List

      public void readSFixed64List(List<Long> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type SFIXED64_LIST or SFIXED64_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readSInt32List

      public void readSInt32List(List<Integer> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type SINT32_LIST or SINT32_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readSInt64List

      public void readSInt64List(List<Long> target) throws IOException
      Description copied from interface: Reader
      Reads the next field of type SINT64_LIST or SINT64_LIST_PACKED and advances the reader to the next field.
      Parameters:
      target - the list that will receive the read values.
      Throws:
      IOException
    • readMap

      public <K, V> void readMap(Map<K,V> target, MapEntryLite.Metadata<K,V> metadata, ExtensionRegistryLite extensionRegistry) throws IOException
      Description copied from interface: Reader
      Reads the next field of type MAP and advances the reader to the next field.
      Parameters:
      target - the mutable map that will receive the read values.
      metadata - the default entry of the map field.
      extensionRegistry - the extension registry for parsing message value fields.
      Throws:
      IOException
    • readField

      private Object readField(WireFormat.FieldType fieldType, Class<?> messageType, ExtensionRegistryLite extensionRegistry) throws IOException
      Throws:
      IOException
    • readVarint32

      private int readVarint32() throws IOException
      Read a raw Varint from the stream. If larger than 32 bits, discard the upper bits.
      Throws:
      IOException
    • readVarint64

      public long readVarint64() throws IOException
      Throws:
      IOException
    • readVarint64SlowPath

      private long readVarint64SlowPath() throws IOException
      Throws:
      IOException
    • readByte

      private byte readByte() throws IOException
      Throws:
      IOException
    • readLittleEndian32

      private int readLittleEndian32() throws IOException
      Throws:
      IOException
    • readLittleEndian64

      private long readLittleEndian64() throws IOException
      Throws:
      IOException
    • readLittleEndian32_NoCheck

      private int readLittleEndian32_NoCheck()
    • readLittleEndian64_NoCheck

      private long readLittleEndian64_NoCheck()
    • skipVarint

      private void skipVarint() throws IOException
      Throws:
      IOException
    • skipVarintSlowPath

      private void skipVarintSlowPath() throws IOException
      Throws:
      IOException
    • skipBytes

      private void skipBytes(int size) throws IOException
      Throws:
      IOException
    • skipGroup

      private void skipGroup() throws IOException
      Throws:
      IOException
    • requireBytes

      private void requireBytes(int size) throws IOException
      Throws:
      IOException
    • requireWireType

      private void requireWireType(int requiredWireType) throws IOException
      Throws:
      IOException
    • verifyPackedFixed64Length

      private void verifyPackedFixed64Length(int bytes) throws IOException
      Throws:
      IOException
    • verifyPackedFixed32Length

      private void verifyPackedFixed32Length(int bytes) throws IOException
      Throws:
      IOException
    • requirePosition

      private void requirePosition(int expectedPosition) throws IOException
      Throws:
      IOException