@Override public void readNull() throws IOException { parser.advance(Symbol.NULL); in.readNull(); }
@Override public int readInt() throws IOException { parser.advance(Symbol.INT); return in.readInt(); }
@Override public double readDouble() throws IOException { parser.advance(Symbol.DOUBLE); return in.readDouble(); }
@Override public Utf8 readString(Utf8 old) throws IOException { parser.advance(Symbol.STRING); return in.readString(old); }
@Override public ByteBuffer readBytes(ByteBuffer old) throws IOException { parser.advance(Symbol.BYTES); return in.readBytes(old); }
@Override public void skipBytes() throws IOException { parser.advance(Symbol.BYTES); in.skipBytes(); }
@Override public boolean readBoolean() throws IOException { parser.advance(Symbol.BOOLEAN); return in.readBoolean(); }
private void advance(Symbol symbol) throws IOException { this.parser.processTrailingImplicitActions(); if (in.getCurrentToken() == null && this.parser.depth() == 1) throw new EOFException(); parser.advance(symbol); }
@Override public void skipBytes() throws IOException { Symbol actual = parser.advance(Symbol.BYTES); if (actual == Symbol.STRING) { in.skipString(); } else { assert actual == Symbol.BYTES; in.skipBytes(); } }
@Override public long arrayNext() throws IOException { parser.processTrailingImplicitActions(); long result = in.arrayNext(); if (result == 0) { parser.advance(Symbol.ARRAY_END); } return result; }
@Override public void skipString() throws IOException { Symbol actual = parser.advance(Symbol.STRING); if (actual == Symbol.BYTES) { in.skipBytes(); } else { assert actual == Symbol.STRING; in.skipString(); } }
private void checkFixed(int size) throws IOException { parser.advance(Symbol.FIXED); Symbol.IntCheckAction top = (Symbol.IntCheckAction) parser.popSymbol(); if (size != top.size) { throw new AvroTypeException( "Incorrect length for fixed binary: expected " + top.size + " but received " + size + " bytes."); } }
@Override public void skipString() throws IOException { Symbol actual = parser.advance(Symbol.STRING); if (actual == Symbol.BYTES) { in.skipBytes(); } else { assert actual == Symbol.STRING; in.skipString(); } }
@Override public Utf8 readString(Utf8 old) throws IOException { Symbol actual = parser.advance(Symbol.STRING); if (actual == Symbol.BYTES) { return new Utf8(in.readBytes(null).array()); } else { assert actual == Symbol.STRING; return in.readString(old); } }
@Override public float readFloat() throws IOException { Symbol actual = parser.advance(Symbol.FLOAT); if (actual == Symbol.INT) { return (float) in.readInt(); } else if (actual == Symbol.LONG) { return (float) in.readLong(); } else { assert actual == Symbol.FLOAT; return (float) in.readFloat(); } }
@Override public ByteBuffer readBytes(ByteBuffer old) throws IOException { Symbol actual = parser.advance(Symbol.BYTES); if (actual == Symbol.STRING) { Utf8 s = in.readString(null); return ByteBuffer.wrap(s.getBytes(), 0, s.getByteLength()); } else { assert actual == Symbol.BYTES; return in.readBytes(old); } }
@Override public long readLong() throws IOException { Symbol actual = parser.advance(Symbol.LONG); if (actual == Symbol.INT) { return in.readInt(); } else if (actual == Symbol.DOUBLE) { return (long) in.readDouble(); } else { assert actual == Symbol.LONG; return in.readLong(); } }
@Override public int readEnum() throws IOException { parser.advance(Symbol.ENUM); Symbol.IntCheckAction top = (Symbol.IntCheckAction) parser.popSymbol(); int result = in.readEnum(); if (result < 0 || result >= top.size) { throw new AvroTypeException( "Enumeration out of range: max is " + top.size + " but received " + result); } return result; }
@Override public ByteBuffer readBytes(ByteBuffer old) throws IOException { Symbol actual = parser.advance(Symbol.BYTES); if (actual == Symbol.STRING) { Utf8 s = in.readString(null); return ByteBuffer.wrap(s.getBytes(), 0, s.getByteLength()); } else { assert actual == Symbol.BYTES; return in.readBytes(old); } }