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

Long/Int in Binary Decoder

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 1.9.0
    • 1.9.0
    • java
    • 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

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

              Dates

                Created:
                Updated:
                Resolved: