[ 
https://issues.apache.org/jira/browse/AVRO-2351?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

David Mollitor updated AVRO-2351:
---------------------------------
    Description: 
{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#binary_encode_complex

  was:
{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


> 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
>            Assignee: David Mollitor
>            Priority: Minor
>
> {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#binary_encode_complex



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to