Class JsonDecoder

All Implemented Interfaces:
Parser.ActionHandler, SkipParser.SkipHandler

public class JsonDecoder extends ParsingDecoder implements Parser.ActionHandler
A Decoder for Avro's JSON data encoding.

Construct using DecoderFactory.

JsonDecoder is not thread-safe.
  • Method Details

    • configure

      public JsonDecoder configure(InputStream in) throws IOException
      Reconfigures this JsonDecoder to use the InputStream provided.

      If the InputStream provided is null, a NullPointerException is thrown.

      Otherwise, this JsonDecoder will reset its state and then reconfigure its input.

      Parameters:
      in - The InputStream to read from. Cannot be null.
      Returns:
      this JsonDecoder
      Throws:
      IOException
      NullPointerException - if in is null
    • configure

      public JsonDecoder configure(String in) throws IOException
      Reconfigures this JsonDecoder to use the String provided for input.

      If the String provided is null, a NullPointerException is thrown.

      Otherwise, this JsonDecoder will reset its state and then reconfigure its input.

      Parameters:
      in - The String to read from. Cannot be null.
      Returns:
      this JsonDecoder
      Throws:
      IOException
      NullPointerException - if in is null
    • readNull

      public void readNull() throws IOException
      Description copied from class: Decoder
      "Reads" a null value. (Doesn't actually read anything, but advances the state of the parser if the implementation is stateful.)
      Specified by:
      readNull in class Decoder
      Throws:
      IOException
    • readBoolean

      public boolean readBoolean() throws IOException
      Description copied from class: Decoder
      Reads a boolean value written by Encoder.writeBoolean(boolean).
      Specified by:
      readBoolean in class Decoder
      Throws:
      IOException
    • readInt

      public int readInt() throws IOException
      Description copied from class: Decoder
      Reads an integer written by Encoder.writeInt(int).
      Specified by:
      readInt in class Decoder
      Throws:
      IOException
    • readLong

      public long readLong() throws IOException
      Description copied from class: Decoder
      Reads a long written by Encoder.writeLong(long).
      Specified by:
      readLong in class Decoder
      Throws:
      IOException
    • readFloat

      public float readFloat() throws IOException
      Description copied from class: Decoder
      Reads a float written by Encoder.writeFloat(float).
      Specified by:
      readFloat in class Decoder
      Throws:
      IOException
    • readDouble

      public double readDouble() throws IOException
      Description copied from class: Decoder
      Reads a double written by Encoder.writeDouble(double).
      Specified by:
      readDouble in class Decoder
      Throws:
      IOException
    • readString

      public Utf8 readString(Utf8 old) throws IOException
      Description copied from class: Decoder
      Reads a char-string written by Encoder.writeString(org.apache.avro.util.Utf8).
      Specified by:
      readString in class Decoder
      Throws:
      IOException
    • readString

      public String readString() throws IOException
      Description copied from class: Decoder
      Reads a char-string written by Encoder.writeString(org.apache.avro.util.Utf8).
      Specified by:
      readString in class Decoder
      Throws:
      IOException
    • skipString

      public void skipString() throws IOException
      Description copied from class: Decoder
      Discards a char-string written by Encoder.writeString(org.apache.avro.util.Utf8).
      Specified by:
      skipString in class Decoder
      Throws:
      IOException
    • readBytes

      public ByteBuffer readBytes(ByteBuffer old) throws IOException
      Description copied from class: Decoder
      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.
      Specified by:
      readBytes in class Decoder
      Throws:
      IOException
    • skipBytes

      public void skipBytes() throws IOException
      Description copied from class: Decoder
      Discards a byte-string written by Encoder.writeBytes(java.nio.ByteBuffer).
      Specified by:
      skipBytes in class Decoder
      Throws:
      IOException
    • readFixed

      public void readFixed(byte[] bytes, int start, int len) throws IOException
      Description copied from class: Decoder
      Reads fixed sized binary object.
      Specified by:
      readFixed in class Decoder
      Parameters:
      bytes - The buffer to store the contents being read.
      start - The position where the data needs to be written.
      len - The size of the binary object.
      Throws:
      IOException
    • skipFixed

      public void skipFixed(int length) throws IOException
      Description copied from class: Decoder
      Discards fixed sized binary object.
      Specified by:
      skipFixed in class Decoder
      Parameters:
      length - The size of the binary object to be skipped.
      Throws:
      IOException
    • skipFixed

      protected void skipFixed() throws IOException
      Specified by:
      skipFixed in class ParsingDecoder
      Throws:
      IOException
    • readEnum

      public int readEnum() throws IOException
      Description copied from class: Decoder
      Reads an enumeration.
      Specified by:
      readEnum in class Decoder
      Returns:
      The enumeration's value.
      Throws:
      IOException
    • readArrayStart

      public long readArrayStart() throws IOException
      Description copied from class: Decoder
      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 Decoder.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 invalid input: '<' i; j++) {
             read next element of the array;
           }
         }
       
      Specified by:
      readArrayStart in class Decoder
      Throws:
      IOException
    • arrayNext

      public long arrayNext() throws IOException
      Description copied from class: Decoder
      Processes the next block of an array and returns the number of items in the block and let's the caller read those items.
      Specified by:
      arrayNext in class Decoder
      Throws:
      IOException
    • skipArray

      public long skipArray() throws IOException
      Description copied from class: Decoder
      Used for quickly skipping through an array. Note you can either skip the entire array, or read the entire array (with Decoder.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 invalid input: '<' 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.
      Specified by:
      skipArray in class Decoder
      Throws:
      IOException
    • readMapStart

      public long readMapStart() throws IOException
      Description copied from class: Decoder
      Reads and returns the size of the next block of map-entries. Similar to Decoder.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:
       Mapinvalid input: '<'String, Record> m = new HashMapinvalid input: '<'String, Record>();
       Record reuse = new Record();
       for (long i = in.readMapStart(); i != 0; i = in.readMapNext()) {
         for (long j = 0; j invalid input: '<' i; j++) {
           String key = in.readString();
           reuse.intField = in.readInt();
           reuse.boolField = in.readBoolean();
           m.put(key, reuse);
         }
       }
       
      Specified by:
      readMapStart in class Decoder
      Throws:
      IOException
    • mapNext

      public long mapNext() throws IOException
      Description copied from class: Decoder
      Processes the next block of map entries and returns the count of them. Similar to Decoder.arrayNext(). See Decoder.readMapStart() for details.
      Specified by:
      mapNext in class Decoder
      Throws:
      IOException
    • skipMap

      public long skipMap() throws IOException
      Description copied from class: Decoder
      Support for quickly skipping through a map similar to Decoder.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 invalid input: '<' i; j++) {
           in.skipString(); // Discard key
           in.readInt(); // Discard int-field of value
           in.readBoolean(); // Discard boolean-field of value
         }
       }
       
      Specified by:
      skipMap in class Decoder
      Throws:
      IOException
    • readIndex

      public int readIndex() throws IOException
      Description copied from class: Decoder
      Reads the tag of a union written by Encoder.writeIndex(int).
      Specified by:
      readIndex in class Decoder
      Throws:
      IOException
    • doAction

      public Symbol doAction(Symbol input, Symbol top) throws IOException
      Description copied from interface: Parser.ActionHandler
      Handle the action symbol top when the input is sought to be taken off the stack.
      Specified by:
      doAction in interface Parser.ActionHandler
      Parameters:
      input - The input symbol from the caller of advance
      top - The symbol at the top the stack.
      Returns:
      null if advance() is to continue processing the stack. If not null the return value will be returned by advance().
      Throws:
      IOException