Uploaded image for project: 'Apache Avro'
  1. Apache Avro
  2. AVRO-2351

Long/Int in Binary Decoder

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 1.9.0
    • Fix Version/s: 1.9.0
    • Component/s: java
    • Labels:
      None

      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;
        }
      

      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

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                belugabehr David Mollitor
                Reporter:
                belugabehr David Mollitor
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: