org.apache.avro.io

## Class Decoder

- java.lang.Object
- - org.apache.avro.io.Decoder

- Direct Known Subclasses:
    BinaryDecoder, ParsingDecoder

      public abstract class Decoder
      extends Object

  Low-level support for de-serializing Avro values.

  This class has two types of methods. One type of methods support the reading of leaf values (for example, `readLong()` and `readString(org.apache.avro.util.Utf8)`).

  The other type of methods support the reading of maps and arrays. These methods are `readArrayStart()`, `arrayNext()`, and similar methods for maps). See `readArrayStart()` for details on these methods.)

  `DecoderFactory` contains Decoder construction and configuration facilities.
  See Also:
    `DecoderFactory`, `Encoder`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `Decoder()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `abstract long` | `arrayNext()` Processes the next block of an array and returns the number of items in the block and let's the caller read those items.
    `abstract long` | `mapNext()` Processes the next block of map entries and returns the count of them.
    `abstract long` | `readArrayStart()` Reads and returns the size of the first block of an array.
    `abstract boolean` | `readBoolean()` Reads a boolean value written by `Encoder.writeBoolean(boolean)`.
    `abstract ByteBuffer` | `readBytes(ByteBuffer old)` Reads a byte-string written by `Encoder.writeBytes(java.nio.ByteBuffer)`.
    `abstract double` | `readDouble()` Reads a double written by `Encoder.writeDouble(double)`.
    `abstract int` | `readEnum()` Reads an enumeration.
    `void` | `readFixed(byte[] bytes)` A shorthand for `readFixed(bytes, 0, bytes.length)`.
    `abstract void` | `readFixed(byte[] bytes, int start, int length)` Reads fixed sized binary object.
    `abstract float` | `readFloat()` Reads a float written by `Encoder.writeFloat(float)`.
    `abstract int` | `readIndex()` Reads the tag of a union written by `Encoder.writeIndex(int)`.
    `abstract int` | `readInt()` Reads an integer written by `Encoder.writeInt(int)`.
    `abstract long` | `readLong()` Reads a long written by `Encoder.writeLong(long)`.
    `abstract long` | `readMapStart()` Reads and returns the size of the next block of map-entries.
    `abstract void` | `readNull()` "Reads" a null value.
    `abstract String` | `readString()` Reads a char-string written by `Encoder.writeString(org.apache.avro.util.Utf8)`.
    `abstract Utf8` | `readString(Utf8 old)` Reads a char-string written by `Encoder.writeString(org.apache.avro.util.Utf8)`.
    `abstract long` | `skipArray()` Used for quickly skipping through an array.
    `abstract void` | `skipBytes()` Discards a byte-string written by `Encoder.writeBytes(java.nio.ByteBuffer)`.
    `abstract void` | `skipFixed(int length)` Discards fixed sized binary object.
    `abstract long` | `skipMap()` Support for quickly skipping through a map similar to `skipArray()`.
    `abstract void` | `skipString()` Discards a char-string written by `Encoder.writeString(org.apache.avro.util.Utf8)`.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### Decoder

          public Decoder()

  - ### Method Detail

    - #### readNull

          public abstract void readNull()
                                 throws IOException

      "Reads" a null value. (Doesn't actually read anything, but advances the state of the parser if the implementation is stateful.)
      Throws:
        `AvroTypeException` - If this is a stateful reader and null is not the type of the next value to be read
        `IOException`

    - #### readBoolean

          public abstract boolean readBoolean()
                                       throws IOException

      Reads a boolean value written by `Encoder.writeBoolean(boolean)`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and boolean is not the type of the next value to be read
        `IOException`

    - #### readInt

          public abstract int readInt()
                               throws IOException

      Reads an integer written by `Encoder.writeInt(int)`.
      Throws:
        `AvroTypeException` - If encoded value is larger than 32-bits
        `AvroTypeException` - If this is a stateful reader and int is not the type of the next value to be read
        `IOException`

    - #### readLong

          public abstract long readLong()
                                 throws IOException

      Reads a long written by `Encoder.writeLong(long)`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and long is not the type of the next value to be read
        `IOException`

    - #### readFloat

          public abstract float readFloat()
                                   throws IOException

      Reads a float written by `Encoder.writeFloat(float)`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and is not the type of the next value to be read
        `IOException`

    - #### readDouble

          public abstract double readDouble()
                                     throws IOException

      Reads a double written by `Encoder.writeDouble(double)`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and is not the type of the next value to be read
        `IOException`

    - #### readString

          public abstract Utf8 readString(Utf8 old)
                                   throws IOException

      Reads a char-string written by `Encoder.writeString(org.apache.avro.util.Utf8)`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and char-string is not the type of the next value to be read
        `IOException`

    - #### readString

          public abstract String readString()
                                     throws IOException

      Reads a char-string written by `Encoder.writeString(org.apache.avro.util.Utf8)`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and char-string is not the type of the next value to be read
        `IOException`

    - #### skipString

          public abstract void skipString()
                                   throws IOException

      Discards a char-string written by `Encoder.writeString(org.apache.avro.util.Utf8)`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and char-string is not the type of the next value to be read
        `IOException`

    - #### readBytes

          public abstract ByteBuffer readBytes(ByteBuffer old)
                                        throws IOException

      Reads a byte-string written by `Encoder.writeBytes(java.nio.ByteBuffer)`. if `old` is not null and has sufficient capacity to take in the bytes being read, the bytes are returned in `old`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and byte-string is not the type of the next value to be read
        `IOException`

    - #### skipBytes

          public abstract void skipBytes()
                                  throws IOException

      Discards a byte-string written by `Encoder.writeBytes(java.nio.ByteBuffer)`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and byte-string is not the type of the next value to be read
        `IOException`

    - #### readFixed

          public abstract void readFixed(byte[] bytes,
                                         int start,
                                         int length)
                                  throws IOException

      Reads fixed sized binary object.
      Parameters:
        `bytes` - The buffer to store the contents being read.
        `start` - The position where the data needs to be written.
        `length` - The size of the binary object.
      Throws:
        `AvroTypeException` - If this is a stateful reader and fixed sized binary object is not the type of the next value to be read or the length is incorrect.
        `IOException`

    - #### readFixed

          public void readFixed(byte[] bytes)
                         throws IOException

      A shorthand for `readFixed(bytes, 0, bytes.length)`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and fixed sized binary object is not the type of the next value to be read or the length is incorrect.
        `IOException`

    - #### skipFixed

          public abstract void skipFixed(int length)
                                  throws IOException

      Discards fixed sized binary object.
      Parameters:
        `length` - The size of the binary object to be skipped.
      Throws:
        `AvroTypeException` - If this is a stateful reader and fixed sized binary object is not the type of the next value to be read or the length is incorrect.
        `IOException`

    - #### readEnum

          public abstract int readEnum()
                                throws IOException

      Reads an enumeration.
      Returns:
        The enumeration's value.
      Throws:
        `AvroTypeException` - If this is a stateful reader and enumeration is not the type of the next value to be read.
        `IOException`

    - #### readArrayStart

          public abstract long readArrayStart()
                                       throws IOException

      Reads and returns the size of the first block of an array. If this method returns non-zero, then the caller should read the indicated number of items, and then call `arrayNext()` to find out the number of items in the next block. The typical pattern for consuming an array looks like:

             for(long i = in.readArrayStart(); i != 0; i = in.arrayNext()) {
               for (long j = 0; j < i; j++) {
                 read next element of the array;
               }
             }

      Throws:
        `AvroTypeException` - If this is a stateful reader and array is not the type of the next value to be read
        `IOException`

    - #### arrayNext

          public abstract long arrayNext()
                                  throws IOException

      Processes the next block of an array and returns the number of items in the block and let's the caller read those items.
      Throws:
        `AvroTypeException` - When called outside of an array context
        `IOException`

    - #### skipArray

          public abstract long skipArray()
                                  throws IOException

      Used for quickly skipping through an array. Note you can either skip the entire array, or read the entire array (with `readArrayStart()`), but you can't mix the two on the same array. This method will skip through as many items as it can, all of them if possible. It will return zero if there are no more items to skip through, or an item count if it needs the client's help in skipping. The typical usage pattern is:

             for(long i = in.skipArray(); i != 0; i = i.skipArray()) {
               for (long j = 0; j < i; j++) {
                 read and discard the next element of the array;
               }
             }

      Note that this method can automatically skip through items if a byte-count is found in the underlying data, or if a schema has been provided to the implementation, but otherwise the client will have to skip through items itself.
      Throws:
        `AvroTypeException` - If this is a stateful reader and array is not the type of the next value to be read
        `IOException`

    - #### readMapStart

          public abstract long readMapStart()
                                     throws IOException

      Reads and returns the size of the next block of map-entries. Similar to `readArrayStart()`. As an example, let's say you want to read a map of records, the record consisting of an Long field and a Boolean field. Your code would look something like this:

           Map m = new HashMap();
           Record reuse = new Record();
           for (long i = in.readMapStart(); i != 0; i = in.readMapNext()) {
             for (long j = 0; j < i; j++) {
               String key = in.readString();
               reuse.intField = in.readInt();
               reuse.boolField = in.readBoolean();
               m.put(key, reuse);
             }
           }

      Throws:
        `AvroTypeException` - If this is a stateful reader and map is not the type of the next value to be read
        `IOException`

    - #### mapNext

          public abstract long mapNext()
                                throws IOException

      Processes the next block of map entries and returns the count of them. Similar to `arrayNext()`. See `readMapStart()` for details.
      Throws:
        `AvroTypeException` - When called outside of a map context
        `IOException`

    - #### skipMap

          public abstract long skipMap()
                                throws IOException

      Support for quickly skipping through a map similar to `skipArray()`. As an example, let's say you want to skip a map of records, the record consisting of an Long field and a Boolean field. Your code would look something like this:

           for (long i = in.skipMap(); i != 0; i = in.skipMap()) {
             for (long j = 0; j < i; j++) {
               in.skipString(); // Discard key
               in.readInt(); // Discard int-field of value
               in.readBoolean(); // Discard boolean-field of value
             }
           }

      Throws:
        `AvroTypeException` - If this is a stateful reader and array is not the type of the next value to be read
        `IOException`

    - #### readIndex

          public abstract int readIndex()
                                 throws IOException

      Reads the tag of a union written by `Encoder.writeIndex(int)`.
      Throws:
        `AvroTypeException` - If this is a stateful reader and union is not the type of the next value to be read
        `IOException`

Copyright © 2009–2024 The Apache Software Foundation. All rights reserved.