Package com.google.protobuf
Class ArrayDecoders
- java.lang.Object
-
- com.google.protobuf.ArrayDecoders
-
@CheckReturnValue final class ArrayDecoders extends java.lang.Object
Helper functions to decode protobuf wire format from a byte array.Note that these functions don't do boundary check on the byte array but instead rely on Java VM to check it. That means parsing routines utilizing these functions must catch IndexOutOfBoundsException and convert it to protobuf's InvalidProtocolBufferException when crossing protobuf public API boundaries.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
ArrayDecoders.Registers
A helper used to return multiple values in a Java function.
-
Field Summary
Fields Modifier and Type Field Description (package private) static int
DEFAULT_RECURSION_LIMIT
private static int
recursionLimit
-
Constructor Summary
Constructors Modifier Constructor Description private
ArrayDecoders()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static void
checkRecursionLimit(int depth)
(package private) static int
decodeBoolList(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated boolean field.(package private) static int
decodeBytes(byte[] data, int position, ArrayDecoders.Registers registers)
Decodes a bytes value.(package private) static int
decodeBytesList(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated bytes field.(package private) static double
decodeDouble(byte[] data, int position)
Decodes and returns a double value.(package private) static int
decodeDoubleList(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated double field.(package private) static int
decodeExtension(int tag, byte[] data, int position, int limit, GeneratedMessageLite.ExtendableMessage<?,?> message, GeneratedMessageLite.GeneratedExtension<?,?> extension, UnknownFieldSchema<UnknownFieldSetLite,UnknownFieldSetLite> unknownFieldSchema, ArrayDecoders.Registers registers)
(package private) static int
decodeExtensionOrUnknownField(int tag, byte[] data, int position, int limit, java.lang.Object message, MessageLite defaultInstance, UnknownFieldSchema<UnknownFieldSetLite,UnknownFieldSetLite> unknownFieldSchema, ArrayDecoders.Registers registers)
(package private) static int
decodeFixed32(byte[] data, int position)
Decodes and returns a fixed32 value.(package private) static int
decodeFixed32List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated fixed32 field.(package private) static long
decodeFixed64(byte[] data, int position)
Decodes and returns a fixed64 value.(package private) static int
decodeFixed64List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated fixed64 field.(package private) static float
decodeFloat(byte[] data, int position)
Decodes and returns a float value.(package private) static int
decodeFloatList(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated float field.(package private) static int
decodeGroupField(Schema schema, byte[] data, int position, int limit, int endGroup, ArrayDecoders.Registers registers)
Decodes a group value.(package private) static int
decodeGroupList(Schema schema, int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated group field(package private) static int
decodeMessageField(Schema schema, byte[] data, int position, int limit, ArrayDecoders.Registers registers)
Decodes a message value.(package private) static int
decodeMessageList(Schema<?> schema, int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated message field(package private) static int
decodePackedBoolList(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a packed boolean field.(package private) static int
decodePackedDoubleList(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a packed double field.(package private) static int
decodePackedFixed32List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a packed fixed32 field.(package private) static int
decodePackedFixed64List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a packed fixed64 field.(package private) static int
decodePackedFloatList(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a packed float field.(package private) static int
decodePackedSInt32List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a packed sint32 field.(package private) static int
decodePackedSInt64List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a packed sint64 field.(package private) static int
decodePackedVarint32List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a packed 32-bit varint field.(package private) static int
decodePackedVarint64List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a packed 64-bit varint field.(package private) static int
decodeSInt32List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated sint32 field.(package private) static int
decodeSInt64List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated sint64 field.(package private) static int
decodeString(byte[] data, int position, ArrayDecoders.Registers registers)
Decodes a string value.(package private) static int
decodeStringList(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated string field.(package private) static int
decodeStringListRequireUtf8(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated string field with utf8 check.(package private) static int
decodeStringRequireUtf8(byte[] data, int position, ArrayDecoders.Registers registers)
Decodes a string value with utf8 check.(package private) static int
decodeUnknownField(int tag, byte[] data, int position, int limit, UnknownFieldSetLite unknownFields, ArrayDecoders.Registers registers)
Decodes an unknown field.(package private) static int
decodeVarint32(byte[] data, int position, ArrayDecoders.Registers registers)
Decodes a varint.(package private) static int
decodeVarint32(int firstByte, byte[] data, int position, ArrayDecoders.Registers registers)
Like decodeVarint32 except that the first byte is already read.(package private) static int
decodeVarint32List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated 32-bit varint field.(package private) static int
decodeVarint64(byte[] data, int position, ArrayDecoders.Registers registers)
Decodes a varint.(package private) static int
decodeVarint64(long firstByte, byte[] data, int position, ArrayDecoders.Registers registers)
Like decodeVarint64 except that the first byte is already read.(package private) static int
decodeVarint64List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated 64-bit varint field.(package private) static int
mergeGroupField(java.lang.Object msg, Schema schema, byte[] data, int position, int limit, int endGroup, ArrayDecoders.Registers registers)
(package private) static int
mergeMessageField(java.lang.Object msg, Schema schema, byte[] data, int position, int limit, ArrayDecoders.Registers registers)
static void
setRecursionLimit(int limit)
Set the maximum recursion limit that ArrayDecoders will allow.(package private) static int
skipField(int tag, byte[] data, int position, int limit, ArrayDecoders.Registers registers)
Skips an unknown field.
-
-
-
Field Detail
-
DEFAULT_RECURSION_LIMIT
static final int DEFAULT_RECURSION_LIMIT
- See Also:
- Constant Field Values
-
recursionLimit
private static volatile int recursionLimit
-
-
Method Detail
-
decodeVarint32
static int decodeVarint32(byte[] data, int position, ArrayDecoders.Registers registers)
Decodes a varint. Returns the position after the varint. The decoded varint is stored in registers.int1.
-
decodeVarint32
static int decodeVarint32(int firstByte, byte[] data, int position, ArrayDecoders.Registers registers)
Like decodeVarint32 except that the first byte is already read.
-
decodeVarint64
static int decodeVarint64(byte[] data, int position, ArrayDecoders.Registers registers)
Decodes a varint. Returns the position after the varint. The decoded varint is stored in registers.long1.
-
decodeVarint64
static int decodeVarint64(long firstByte, byte[] data, int position, ArrayDecoders.Registers registers)
Like decodeVarint64 except that the first byte is already read.
-
decodeFixed32
static int decodeFixed32(byte[] data, int position)
Decodes and returns a fixed32 value.
-
decodeFixed64
static long decodeFixed64(byte[] data, int position)
Decodes and returns a fixed64 value.
-
decodeDouble
static double decodeDouble(byte[] data, int position)
Decodes and returns a double value.
-
decodeFloat
static float decodeFloat(byte[] data, int position)
Decodes and returns a float value.
-
decodeString
static int decodeString(byte[] data, int position, ArrayDecoders.Registers registers) throws InvalidProtocolBufferException
Decodes a string value.- Throws:
InvalidProtocolBufferException
-
decodeStringRequireUtf8
static int decodeStringRequireUtf8(byte[] data, int position, ArrayDecoders.Registers registers) throws InvalidProtocolBufferException
Decodes a string value with utf8 check.- Throws:
InvalidProtocolBufferException
-
decodeBytes
static int decodeBytes(byte[] data, int position, ArrayDecoders.Registers registers) throws InvalidProtocolBufferException
Decodes a bytes value.- Throws:
InvalidProtocolBufferException
-
decodeMessageField
static int decodeMessageField(Schema schema, byte[] data, int position, int limit, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a message value.- Throws:
java.io.IOException
-
decodeGroupField
static int decodeGroupField(Schema schema, byte[] data, int position, int limit, int endGroup, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a group value.- Throws:
java.io.IOException
-
mergeMessageField
static int mergeMessageField(java.lang.Object msg, Schema schema, byte[] data, int position, int limit, ArrayDecoders.Registers registers) throws java.io.IOException
- Throws:
java.io.IOException
-
mergeGroupField
static int mergeGroupField(java.lang.Object msg, Schema schema, byte[] data, int position, int limit, int endGroup, ArrayDecoders.Registers registers) throws java.io.IOException
- Throws:
java.io.IOException
-
decodeVarint32List
static int decodeVarint32List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated 32-bit varint field. Returns the position after all read values.
-
decodeVarint64List
static int decodeVarint64List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated 64-bit varint field. Returns the position after all read values.
-
decodeFixed32List
static int decodeFixed32List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated fixed32 field. Returns the position after all read values.
-
decodeFixed64List
static int decodeFixed64List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated fixed64 field. Returns the position after all read values.
-
decodeFloatList
static int decodeFloatList(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated float field. Returns the position after all read values.
-
decodeDoubleList
static int decodeDoubleList(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated double field. Returns the position after all read values.
-
decodeBoolList
static int decodeBoolList(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated boolean field. Returns the position after all read values.
-
decodeSInt32List
static int decodeSInt32List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated sint32 field. Returns the position after all read values.
-
decodeSInt64List
static int decodeSInt64List(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers)
Decodes a repeated sint64 field. Returns the position after all read values.
-
decodePackedVarint32List
static int decodePackedVarint32List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a packed 32-bit varint field. Returns the position after all read values.- Throws:
java.io.IOException
-
decodePackedVarint64List
static int decodePackedVarint64List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a packed 64-bit varint field. Returns the position after all read values.- Throws:
java.io.IOException
-
decodePackedFixed32List
static int decodePackedFixed32List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a packed fixed32 field. Returns the position after all read values.- Throws:
java.io.IOException
-
decodePackedFixed64List
static int decodePackedFixed64List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a packed fixed64 field. Returns the position after all read values.- Throws:
java.io.IOException
-
decodePackedFloatList
static int decodePackedFloatList(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a packed float field. Returns the position after all read values.- Throws:
java.io.IOException
-
decodePackedDoubleList
static int decodePackedDoubleList(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a packed double field. Returns the position after all read values.- Throws:
java.io.IOException
-
decodePackedBoolList
static int decodePackedBoolList(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a packed boolean field. Returns the position after all read values.- Throws:
java.io.IOException
-
decodePackedSInt32List
static int decodePackedSInt32List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a packed sint32 field. Returns the position after all read values.- Throws:
java.io.IOException
-
decodePackedSInt64List
static int decodePackedSInt64List(byte[] data, int position, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a packed sint64 field. Returns the position after all read values.- Throws:
java.io.IOException
-
decodeStringList
static int decodeStringList(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws InvalidProtocolBufferException
Decodes a repeated string field. Returns the position after all read values.- Throws:
InvalidProtocolBufferException
-
decodeStringListRequireUtf8
static int decodeStringListRequireUtf8(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws InvalidProtocolBufferException
Decodes a repeated string field with utf8 check. Returns the position after all read values.- Throws:
InvalidProtocolBufferException
-
decodeBytesList
static int decodeBytesList(int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws InvalidProtocolBufferException
Decodes a repeated bytes field. Returns the position after all read values.- Throws:
InvalidProtocolBufferException
-
decodeMessageList
static int decodeMessageList(Schema<?> schema, int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a repeated message field- Returns:
- The position of after read all messages
- Throws:
java.io.IOException
-
decodeGroupList
static int decodeGroupList(Schema schema, int tag, byte[] data, int position, int limit, Internal.ProtobufList<?> list, ArrayDecoders.Registers registers) throws java.io.IOException
Decodes a repeated group field- Returns:
- The position of after read all groups
- Throws:
java.io.IOException
-
decodeExtensionOrUnknownField
static int decodeExtensionOrUnknownField(int tag, byte[] data, int position, int limit, java.lang.Object message, MessageLite defaultInstance, UnknownFieldSchema<UnknownFieldSetLite,UnknownFieldSetLite> unknownFieldSchema, ArrayDecoders.Registers registers) throws java.io.IOException
- Throws:
java.io.IOException
-
decodeExtension
static int decodeExtension(int tag, byte[] data, int position, int limit, GeneratedMessageLite.ExtendableMessage<?,?> message, GeneratedMessageLite.GeneratedExtension<?,?> extension, UnknownFieldSchema<UnknownFieldSetLite,UnknownFieldSetLite> unknownFieldSchema, ArrayDecoders.Registers registers) throws java.io.IOException
- Throws:
java.io.IOException
-
decodeUnknownField
static int decodeUnknownField(int tag, byte[] data, int position, int limit, UnknownFieldSetLite unknownFields, ArrayDecoders.Registers registers) throws InvalidProtocolBufferException
Decodes an unknown field.- Throws:
InvalidProtocolBufferException
-
skipField
static int skipField(int tag, byte[] data, int position, int limit, ArrayDecoders.Registers registers) throws InvalidProtocolBufferException
Skips an unknown field.- Throws:
InvalidProtocolBufferException
-
setRecursionLimit
public static void setRecursionLimit(int limit)
Set the maximum recursion limit that ArrayDecoders will allow. An exception will be thrown if the depth of the message exceeds this limit.
-
checkRecursionLimit
private static void checkRecursionLimit(int depth) throws InvalidProtocolBufferException
- Throws:
InvalidProtocolBufferException
-
-