Class RawMessageInfo
- All Implemented Interfaces:
MessageInfo
MessageInfo
but in a more compact
format.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final MessageLite
private final int
private final String
The compact format packs everything in a String object and a Object[] array.private final Object[]
-
Constructor Summary
Constructors -
Method Summary
-
Field Details
-
defaultInstance
-
info
The compact format packs everything in a String object and a Object[] array. The String object is encoded with field number, field type, hasbits offset, oneof index, etc., whereas the Object[] array contains field references, class references, instance references, etc.The String object encodes a sequence of integers into UTF-16 characters. For each int, it will be encoding into 1 to 3 UTF-16 characters depending on its unsigned value:
- 1 char: [c1: 0x0000 - 0xD7FF] = int of the same value.
- 2 chars: [c1: 0xE000 - 0xFFFF], [c2: 0x0000 - 0xD7FF] = (c2 invalid input: '<'invalid input: '<' 13) | (c1 invalid input: '&' 0x1FFF)
- 3 chars: [c1: 0xE000 - 0xFFFF], [c2: 0xE000 - 0xFFFF], [c3: 0x0000 - 0xD7FF] = (c3 invalid input: '<'invalid input: '<' 26) | ((c2 invalid input: '&' 0x1FFF) invalid input: '<'invalid input: '<' 13) | (c1 invalid input: '&' 0x1FFF)
Note that we don't use UTF-16 surrogate pairs [0xD800 - 0xDFFF] because they have to come in pairs to form a valid UTF-16char sequence and don't help us encode values more efficiently.
The integer sequence encoded in the String object has the following layout:
- [0]: flags, flags invalid input: '&' 0x1 = is proto2?, flags invalid input: '&' 0x2 = is message?.
- [1]: field count, if 0, this is the end of the integer sequence and the corresponding Object[] array should be null.
- [2]: oneof count
- [3]: hasbits count, how many hasbits integers are generated.
- [4]: min field number
- [5]: max field number
- [6]: total number of entries need to allocate
- [7]: map field count
- [8]: repeated field count, this doesn't include map fields.
- [9]: size of checkInitialized array
- [...]: field entries
Each field entry starts with a field number and the field type:
- [0]: field number
- [1]: field type with extra bits:
- v invalid input: '&' 0xFF = field type as defined in the FieldType class
- v invalid input: '&' 0x0100 = is required?
- v invalid input: '&' 0x0200 = is checkUtf8?
- v invalid input: '&' 0x0400 = needs isInitialized check?
- v invalid input: '&' 0x0800 = is map field with proto2 enum value?
- v invalid input: '&' 0x1000 = supports presence checking?
- [2]: hasbits offset
- [2]: oneof index
The Object[] array has 3 sections:
- ---- oneof section ----
- [0]: value field for oneof 1.
- [1]: case field for oneof 1.
- ...
- [.]: value field for oneof n.
- [.]: case field for oneof n.
- ---- hasbits section ----
- [.]: hasbits field 1
- [.]: hasbits field 2
- ...
- [.]: hasbits field n
- ---- field section ----
- [...]: field entries
In the Object[] array, field entries are ordered in the same way as field entries in the String object. The size of each entry is determined by the field type.
- Oneof field:
- Oneof message field:
- [0]: message class reference.
- Oneof enum fieldin proto2:
- [0]: EnumLiteMap
- For all other oneof fields, field entry in the Object[] array is empty.
- Oneof message field:
- Repeated message field:
- [0]: field reference
- [1]: message class reference
- Proto2 singular/repeated enum field:
- [0]: field reference
- [1]: EnumLiteMap
- Map field with a proto2 enum value:
- [0]: field reference
- [1]: map default entry instance
- [2]: EnumLiteMap
- Map field with other value types:
- [0]: field reference
- [1]: map default entry instance
- All other field type:
- [0]: field reference
In order to read the field info from this compact format, a reader needs to progress through the String object and the Object[] array simultaneously.
-
objects
-
flags
private final int flags
-
-
Constructor Details
-
RawMessageInfo
RawMessageInfo(MessageLite defaultInstance, String info, Object[] objects)
-
-
Method Details
-
getStringInfo
String getStringInfo() -
getObjects
Object[] getObjects() -
getDefaultInstance
Description copied from interface:MessageInfo
Gets the default instance of this type.- Specified by:
getDefaultInstance
in interfaceMessageInfo
-
getSyntax
Description copied from interface:MessageInfo
Gets syntax for this type.- Specified by:
getSyntax
in interfaceMessageInfo
-
isMessageSetWireFormat
public boolean isMessageSetWireFormat()Description copied from interface:MessageInfo
Whether this type is MessageSet.- Specified by:
isMessageSetWireFormat
in interfaceMessageInfo
-