Package com.google.protobuf
Class BinaryReader.SafeHeapReader
java.lang.Object
com.google.protobuf.BinaryReader
com.google.protobuf.BinaryReader.SafeHeapReader
- All Implemented Interfaces:
Reader
- Enclosing class:
BinaryReader
A
BinaryReader
implementation that operates on a heap ByteBuffer
. Uses only
safe operations on the underlying array.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final byte[]
private final boolean
private int
private final int
private int
private int
private int
Fields inherited from interface com.google.protobuf.Reader
READ_DONE, TAG_UNKNOWN
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionint
Gets the field number for the current field being read.int
getTag()
Gets the wire tag of the current field.int
Returns the total number of bytes read so far from the input buffer.private boolean
isAtEnd()
<T> void
mergeGroupField
(T target, Schema<T> schema, ExtensionRegistryLite extensionRegistry) Read a group field from the wire format and merge the results into the given target.<T> void
mergeMessageField
(T target, Schema<T> schema, ExtensionRegistryLite extensionRegistry) Read a message field from the wire format and merge the results into the given target.boolean
readBool()
Reads and returns the next field of typeBOOL
and advances the reader to the next field.void
readBoolList
(List<Boolean> target) Reads the next field of typeBOOL_LIST
orBOOL_LIST_PACKED
and advances the reader to the next field.private byte
readByte()
Reads and returns the next field of typeBYTES
and advances the reader to the next field.void
readBytesList
(List<ByteString> target) Reads the next field of typeBYTES_LIST
and advances the reader to the next field.double
Reads and returns the next field of typeDOUBLE
and advances the reader to the next field.void
readDoubleList
(List<Double> target) Reads the next field of typeDOUBLE_LIST
orDOUBLE_LIST_PACKED
and advances the reader to the next field.int
readEnum()
Reads and returns the next field of typeENUM
and advances the reader to the next field.void
readEnumList
(List<Integer> target) Reads the next field of typeENUM_LIST
orENUM_LIST_PACKED
and advances the reader to the next field.private Object
readField
(WireFormat.FieldType fieldType, Class<?> messageType, ExtensionRegistryLite extensionRegistry) int
Reads and returns the next field of typeFIXED32
and advances the reader to the next field.void
readFixed32List
(List<Integer> target) Reads the next field of typeFIXED32_LIST
orFIXED32_LIST_PACKED
and advances the reader to the next field.long
Reads and returns the next field of typeFIXED64
and advances the reader to the next field.void
readFixed64List
(List<Long> target) Reads the next field of typeFIXED64_LIST
orFIXED64_LIST_PACKED
and advances the reader to the next field.float
Reads and returns the next field of typeFLOAT
and advances the reader to the next field.void
readFloatList
(List<Float> target) Reads the next field of typeFLOAT_LIST
orFLOAT_LIST_PACKED
and advances the reader to the next field.private <T> T
readGroup
(Schema<T> schema, ExtensionRegistryLite extensionRegistry) <T> T
readGroup
(Class<T> clazz, ExtensionRegistryLite extensionRegistry) Reads and returns the next field of typeGROUP
and advances the reader to the next field.<T> T
readGroupBySchemaWithCheck
(Schema<T> schema, ExtensionRegistryLite extensionRegistry) <T> void
readGroupList
(List<T> target, Schema<T> schema, ExtensionRegistryLite extensionRegistry) <T> void
readGroupList
(List<T> target, Class<T> targetType, ExtensionRegistryLite extensionRegistry) Reads the next field of typeGROUP_LIST
and advances the reader to the next field.int
Reads and returns the next field of typeINT32
and advances the reader to the next field.void
readInt32List
(List<Integer> target) Reads the next field of typeINT32_LIST
orINT32_LIST_PACKED
and advances the reader to the next field.long
Reads and returns the next field of typeINT64
and advances the reader to the next field.void
readInt64List
(List<Long> target) Reads the next field of typeINT64_LIST
orINT64_LIST_PACKED
and advances the reader to the next field.private int
private int
private long
private long
<K,
V> void readMap
(Map<K, V> target, MapEntryLite.Metadata<K, V> metadata, ExtensionRegistryLite extensionRegistry) Reads the next field of typeMAP
and advances the reader to the next field.private <T> T
readMessage
(Schema<T> schema, ExtensionRegistryLite extensionRegistry) <T> T
readMessage
(Class<T> clazz, ExtensionRegistryLite extensionRegistry) Reads and returns the next field of typeMESSAGE
and advances the reader to the next field.<T> T
readMessageBySchemaWithCheck
(Schema<T> schema, ExtensionRegistryLite extensionRegistry) <T> void
readMessageList
(List<T> target, Schema<T> schema, ExtensionRegistryLite extensionRegistry) Reads the next field of typeMESSAGE_LIST
and advances the reader to the next field.<T> void
readMessageList
(List<T> target, Class<T> targetType, ExtensionRegistryLite extensionRegistry) int
Reads and returns the next field of typeSFIXED32
and advances the reader to the next field.void
readSFixed32List
(List<Integer> target) Reads the next field of typeSFIXED32_LIST
orSFIXED32_LIST_PACKED
and advances the reader to the next field.long
Reads and returns the next field of typeSFIXED64
and advances the reader to the next field.void
readSFixed64List
(List<Long> target) Reads the next field of typeSFIXED64_LIST
orSFIXED64_LIST_PACKED
and advances the reader to the next field.int
Reads and returns the next field of typeSINT32
and advances the reader to the next field.void
readSInt32List
(List<Integer> target) Reads the next field of typeSINT32_LIST
orSINT32_LIST_PACKED
and advances the reader to the next field.long
Reads and returns the next field of typeSINT64
and advances the reader to the next field.void
readSInt64List
(List<Long> target) Reads the next field of typeSINT64_LIST
orSINT64_LIST_PACKED
and advances the reader to the next field.Reads and returns the next field of typeSTRING
and advances the reader to the next field.readStringInternal
(boolean requireUtf8) void
readStringList
(List<String> target) Reads the next field of typeSTRING_LIST
and advances the reader to the next field.void
readStringListInternal
(List<String> target, boolean requireUtf8) void
readStringListRequireUtf8
(List<String> target) Reads the next field of typeSTRING_LIST
and advances the reader to the next field.Reads and returns the next field of typeSTRING
and advances the reader to the next field.int
Reads and returns the next field of typeUINT32
and advances the reader to the next field.void
readUInt32List
(List<Integer> target) Reads the next field of typeUINT32_LIST
orUINT32_LIST_PACKED
and advances the reader to the next field.long
Reads and returns the next field of typeUINT64
and advances the reader to the next field.void
readUInt64List
(List<Long> target) Reads the next field of typeUINT64_LIST
orUINT64_LIST_PACKED
and advances the reader to the next field.private int
Read a raw Varint from the stream.long
private long
private void
requireBytes
(int size) private void
requirePosition
(int expectedPosition) private void
requireWireType
(int requiredWireType) private void
skipBytes
(int size) boolean
Skips the current field and advances the reader to the next field.private void
private void
private void
private void
verifyPackedFixed32Length
(int bytes) private void
verifyPackedFixed64Length
(int bytes) Methods inherited from class com.google.protobuf.BinaryReader
newInstance, shouldDiscardUnknownFields
-
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
-
-
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 classBinaryReader
-
getFieldNumber
Description copied from interface:Reader
Gets the field number for the current field being read.TODO(liujisi): 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
Description copied from interface:Reader
Skips the current field and advances the reader to the next field.- Returns:
true
if there are more fields orfalse
if the end of input has been reached.- Throws:
IOException
-
readDouble
Description copied from interface:Reader
Reads and returns the next field of typeDOUBLE
and advances the reader to the next field.- Throws:
IOException
-
readFloat
Description copied from interface:Reader
Reads and returns the next field of typeFLOAT
and advances the reader to the next field.- Throws:
IOException
-
readUInt64
Description copied from interface:Reader
Reads and returns the next field of typeUINT64
and advances the reader to the next field.- Throws:
IOException
-
readInt64
Description copied from interface:Reader
Reads and returns the next field of typeINT64
and advances the reader to the next field.- Throws:
IOException
-
readInt32
Description copied from interface:Reader
Reads and returns the next field of typeINT32
and advances the reader to the next field.- Throws:
IOException
-
readFixed64
Description copied from interface:Reader
Reads and returns the next field of typeFIXED64
and advances the reader to the next field.- Throws:
IOException
-
readFixed32
Description copied from interface:Reader
Reads and returns the next field of typeFIXED32
and advances the reader to the next field.- Throws:
IOException
-
readBool
Description copied from interface:Reader
Reads and returns the next field of typeBOOL
and advances the reader to the next field.- Throws:
IOException
-
readString
Description copied from interface:Reader
Reads and returns the next field of typeSTRING
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
Description copied from interface:Reader
Reads and returns the next field of typeSTRING
and advances the reader to the next field. If the stream contains malformed UTF-8, throw exceptionInvalidProtocolBufferException
.- Throws:
IOException
-
readStringInternal
- 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 typeMESSAGE
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
Description copied from interface:Reader
Reads and returns the next field of typeGROUP
and advances the reader to the next field.- Throws:
IOException
-
readGroupBySchemaWithCheck
public <T> T readGroupBySchemaWithCheck(Schema<T> schema, ExtensionRegistryLite extensionRegistry) throws IOException - 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
Description copied from interface:Reader
Reads and returns the next field of typeBYTES
and advances the reader to the next field.- Throws:
IOException
-
readUInt32
Description copied from interface:Reader
Reads and returns the next field of typeUINT32
and advances the reader to the next field.- Throws:
IOException
-
readEnum
Description copied from interface:Reader
Reads and returns the next field of typeENUM
and advances the reader to the next field.- Throws:
IOException
-
readSFixed32
Description copied from interface:Reader
Reads and returns the next field of typeSFIXED32
and advances the reader to the next field.- Throws:
IOException
-
readSFixed64
Description copied from interface:Reader
Reads and returns the next field of typeSFIXED64
and advances the reader to the next field.- Throws:
IOException
-
readSInt32
Description copied from interface:Reader
Reads and returns the next field of typeSINT32
and advances the reader to the next field.- Throws:
IOException
-
readSInt64
Description copied from interface:Reader
Reads and returns the next field of typeSINT64
and advances the reader to the next field.- Throws:
IOException
-
readDoubleList
Description copied from interface:Reader
Reads the next field of typeDOUBLE_LIST
orDOUBLE_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readFloatList
Description copied from interface:Reader
Reads the next field of typeFLOAT_LIST
orFLOAT_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readUInt64List
Description copied from interface:Reader
Reads the next field of typeUINT64_LIST
orUINT64_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readInt64List
Description copied from interface:Reader
Reads the next field of typeINT64_LIST
orINT64_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readInt32List
Description copied from interface:Reader
Reads the next field of typeINT32_LIST
orINT32_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readFixed64List
Description copied from interface:Reader
Reads the next field of typeFIXED64_LIST
orFIXED64_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readFixed32List
Description copied from interface:Reader
Reads the next field of typeFIXED32_LIST
orFIXED32_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readBoolList
Description copied from interface:Reader
Reads the next field of typeBOOL_LIST
orBOOL_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readStringList
Description copied from interface:Reader
Reads the next field of typeSTRING_LIST
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readStringListRequireUtf8
Description copied from interface:Reader
Reads the next field of typeSTRING_LIST
and advances the reader to the next field. If the stream contains malformed UTF-8, throw exceptionInvalidProtocolBufferException
.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readStringListInternal
- 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 typeMESSAGE_LIST
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readGroupList
public <T> void readGroupList(List<T> target, Class<T> targetType, ExtensionRegistryLite extensionRegistry) throws IOException Description copied from interface:Reader
Reads the next field of typeGROUP_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 thetarget
list.- Throws:
IOException
-
readGroupList
public <T> void readGroupList(List<T> target, Schema<T> schema, ExtensionRegistryLite extensionRegistry) throws IOException - Throws:
IOException
-
readBytesList
Description copied from interface:Reader
Reads the next field of typeBYTES_LIST
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readUInt32List
Description copied from interface:Reader
Reads the next field of typeUINT32_LIST
orUINT32_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readEnumList
Description copied from interface:Reader
Reads the next field of typeENUM_LIST
orENUM_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readSFixed32List
Description copied from interface:Reader
Reads the next field of typeSFIXED32_LIST
orSFIXED32_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readSFixed64List
Description copied from interface:Reader
Reads the next field of typeSFIXED64_LIST
orSFIXED64_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readSInt32List
Description copied from interface:Reader
Reads the next field of typeSINT32_LIST
orSINT32_LIST_PACKED
and advances the reader to the next field.- Parameters:
target
- the list that will receive the read values.- Throws:
IOException
-
readSInt64List
Description copied from interface:Reader
Reads the next field of typeSINT64_LIST
orSINT64_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, throws IOExceptionV> metadata, ExtensionRegistryLite extensionRegistry) Description copied from interface:Reader
Reads the next field of typeMAP
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
Read a raw Varint from the stream. If larger than 32 bits, discard the upper bits.- Throws:
IOException
-
readVarint64
- Throws:
IOException
-
readVarint64SlowPath
- Throws:
IOException
-
readByte
- Throws:
IOException
-
readLittleEndian32
- Throws:
IOException
-
readLittleEndian64
- Throws:
IOException
-
readLittleEndian32_NoCheck
private int readLittleEndian32_NoCheck() -
readLittleEndian64_NoCheck
private long readLittleEndian64_NoCheck() -
skipVarint
- Throws:
IOException
-
skipVarintSlowPath
- Throws:
IOException
-
skipBytes
- Throws:
IOException
-
skipGroup
- Throws:
IOException
-
requireBytes
- Throws:
IOException
-
requireWireType
- Throws:
IOException
-
verifyPackedFixed64Length
- Throws:
IOException
-
verifyPackedFixed32Length
- Throws:
IOException
-
requirePosition
- Throws:
IOException
-