|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.avro.io.Decoder
org.apache.avro.io.ValidatingDecoder
org.apache.avro.io.ResolvingDecoder
public class ResolvingDecoder
Decoder
that peforms type-resolution between the reader's and
writer's schemas.
When resolving schemas, this class will return the values of fields in
_writer's_ order, not the reader's order. (However, it returns _only_ the
reader's fields, not any extra fields the writer may have written.) To help
clients handle fields that appear to be coming out of order, this class
defines the methods readFieldName()
and readFieldIndex()
.
When called just before reading the value of a record-field, they return the
name/index of the field about to be read. See readFieldIndex()
for
usage details.
See the parser documentation for information on how this works.
Field Summary |
---|
Fields inherited from class org.apache.avro.io.ValidatingDecoder |
---|
in, pos, stack |
Constructor Summary | |
---|---|
ResolvingDecoder(Schema writer,
Schema reader,
Decoder in)
|
Method Summary | |
---|---|
protected int |
advance(int input)
|
double |
readDouble()
Reads a double written by Encoder.writeDouble(double) . |
int |
readEnum()
Reads an enumeration. |
int |
readFieldIndex()
Returns the (zero-based) index of the next field of the record we're reading. |
String |
readFieldName()
Returns the name of the next field of the record we're reading. |
int |
readIndex()
Reads the tag of a union written by Encoder.writeIndex(int) . |
long |
readLong()
Reads a long written by Encoder.writeLong(long) . |
void |
reset()
After reading a complete object that conforms to the schema or after an error, if you want to start reading another object, call this method. |
protected int |
skipSymbol(int sym,
int p)
|
Methods inherited from class org.apache.avro.io.ValidatingDecoder |
---|
arrayNext, expand, init, mapNext, readArrayStart, readBoolean, readBytes, readFixed, readFloat, readInt, readMapStart, readNull, readString, skipArray, skipBytes, skipFixed, skipMap, skipProduction, skipString |
Methods inherited from class org.apache.avro.io.Decoder |
---|
readFixed |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public ResolvingDecoder(Schema writer, Schema reader, Decoder in) throws IOException
IOException
Method Detail |
---|
public String readFieldName() throws IOException
readFieldIndex()
-- see that method for
details.
IllegalStateExcpetion
- If we're not about to read a record-field
IOException
public int readFieldIndex() throws IOException
ResolvingDecoder
returns values in the order written by the writer, rather than
the order expected by the reader. This method allows reader's
to figure out what fields to expect. Let's say the reader is
expecting a three-field record, the first field is a long, the
second a string, and the third an array. In this case, a
typical usage might be as follows:
for (int i = 0; i < 3; i++) { switch (in.readFieldIndex()) { case 1: foo(in.readLong()); break; case 2: someVariable = in.readString(); break; case 3: bar(in); // The code of "bar" will read an array-of-int break; }Note that
ResolvingDecoder
will return only the
fields expected by the reader, not other fields that may have
been written by the writer. Thus, the iteration-count of "3" in
the above loop will always be correct.
Throws a runtime exception if we're not just about to read the
field of a record. Also, this method (and readFieldName()
) will consume the field information, and
thus may only be called once before reading the field
value. (However, if the client knows the order of incoming
fields and does not need to reorder them, then the client does
not need to call this or readFieldName()
.)
IllegalStateExcpetion
- If we're not about to read a record-field
IOException
public long readLong() throws IOException
Decoder
Encoder.writeLong(long)
.
readLong
in class ValidatingDecoder
IOException
public double readDouble() throws IOException
Decoder
Encoder.writeDouble(double)
.
readDouble
in class ValidatingDecoder
IOException
public int readEnum() throws IOException
Decoder
readEnum
in class ValidatingDecoder
IOException
public int readIndex() throws IOException
Decoder
Encoder.writeIndex(int)
.
readIndex
in class ValidatingDecoder
IOException
protected int skipSymbol(int sym, int p) throws IOException
skipSymbol
in class ValidatingDecoder
IOException
protected int advance(int input) throws IOException
advance
in class ValidatingDecoder
IOException
public void reset() throws IOException
Decoder
reset
in class ValidatingDecoder
IOException
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |