Java 序列化Avro GenericRecord的数组

Java 序列化Avro GenericRecord的数组,java,avro,Java,Avro,我使用以下代码在GenericRecord和字节列表之间进行序列化和反序列化: public static byte[] encode(List<GenericRecord> records, Schema schema) throws IOException { SpecificDatumWriter<GenericRecord> datumWriter = new SpecificDatumWriter<>(sche

我使用以下代码在GenericRecord和字节列表之间进行序列化和反序列化:

public static byte[] encode(List<GenericRecord> records, Schema schema) throws IOException {
    SpecificDatumWriter<GenericRecord>
        datumWriter =
        new SpecificDatumWriter<>(schema);
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    byteArrayOutputStream.reset();
    BinaryEncoder binaryEncoder = new EncoderFactory().binaryEncoder(byteArrayOutputStream, null);
    for(GenericRecord segment: records) {
        datumWriter.write(segment, binaryEncoder);
    }
    binaryEncoder.flush();
    byte[] bytes = byteArrayOutputStream.toByteArray();
    return bytes;
}


public static List<GenericRecord>  decode(byte[] recordBytes, Schema schema) throws IOException {
    DatumReader<GenericRecord>
        datumReader =
        new SpecificDatumReader<>(schema);
    ByteArrayInputStream stream = new ByteArrayInputStream(recordBytes);
    stream.reset();
    BinaryDecoder binaryDecoder = new DecoderFactory().binaryDecoder(stream, null);
    List<GenericRecord> records = new ArrayList<>();
    while (true) {
        try {
            GenericRecord record = datumReader.read(null, binaryDecoder);
            records.add(record);
        } catch (EOFException e) {
            break;
        }
    }
    return records;
}

对根本原因有什么想法吗?我是否以正确的方式进行序列化

错误发生在解码时,而不是编码时。可能正在读取的序列化数据已损坏?也许输入文件不包含您认为它包含的内容?@JimGarrison很难说。正确的?不正确的编码可能导致解码错误。不管怎样,你知道一些其他的方法吗?如果我在这种情况下,我会得到Avro源代码并跟踪到代码中,看看它将进入何处。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -40
        at org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:402)
        at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
        at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
        at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
        at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
        at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193)
        at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183)
        at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151)
        at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
        at com.yahoo.gup.utils.SerilizationUtils.decode(SerilizationUtils.java:60)