David Mollitor created AVRO-2351:
------------------------------------
Summary: Long/Int in Binary Decoder
Key: AVRO-2351
URL: https://issues.apache.org/jira/browse/AVRO-2351
Project: Apache Avro
Issue Type: Improvement
Components: java
Affects Versions: 1.9.0
Reporter: David Mollitor
{code:java|title=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;
}
{code}
https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java#L370-L406
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#schema_primitive
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)