【发布时间】:2021-03-28 01:59:15
【问题描述】:
我使用的是 avro-1.10.1 jar,下面是示例代码。 这是为了读取存储在本地系统上的 avro 文件数据。在 reader.read 方法中抛出异常,它试图访问 in.readIndex 并失败。
DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>(schema);
InputStream inputStream = new FileInputStream(new File("E:\\QA_1040\\AVRO_UNI.avro"));
BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(inputStream, null);
GenericRecord data = reader.read(null, decoder);
Error:
{"type":"record","name":"Root","fields":[{"name":"COL_STR","type":["null","string"]},{"name":"COL_INT","type":["null","long"]}]}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -40
at org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:460)
at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:283)
at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:187)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:160)
at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:259)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:247)
at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:179)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:160)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:153)
at gcloud.AvroReadFromLocalFileBinaryDecoder.main(AvroReadFromLocalFileBinaryDecoder.java:55)
【问题讨论】: