Description
BinaryDecoder.java
/** * Returns the number of items to follow in the current array or map. Returns * 0 if there are no more items in the current array and the array/map has * ended. * * @throws IOException */ protected long doReadItemCount() throws IOException { long result = readLong(); if (result < 0) { readLong(); // Consume byte-count if present result = -result; } return result; } /** * Reads the count of items in the current array or map and skip those items, * if possible. If it could skip the items, keep repeating until there are no * more items left in the array or map. If items cannot be skipped (because * byte count to skip is not found in the stream) return the count of the * items found. The client needs to skip the items individually. * * @return Zero if there are no more items to skip and end of array/map is * reached. Positive number if some items are found that cannot be * skipped and the client needs to skip them individually. * @throws IOException */ private long doSkipItems() throws IOException { long result = readInt(); while (result < 0) { long bytecount = readLong(); doSkipBytes(bytecount); result = readInt(); } return result; }
The spec states that the sizes are long values.The doReadItemCount method has it correct and the doSkipItems method uses int values values.
https://avro.apache.org/docs/1.8.2/spec.html#binary_encode_complex
Attachments
Issue Links
- links to