Avro toByteBuffer的输出与DatumWriter序列化的输出不同

时间:2019-07-19 04:04:38

标签: serialization avro

我通过maven插件生成了Avro类。在生成的类中,我找到了函数toByteArray(),并认为它是用于数据的二进制序列化的。不幸的是,输出无法通过flink-avro反序列化(错误:AvroRuntimeException: Malformed data. Length is negative: -98)。我意识到使用DatumWriter进行二进制序列化的输出与toByteBuffer不同。为什么会这样?

P.s。我准备了一个简短的ScalaTest来重现该内容:

"Avro serializer" should "serialize to byteArray in the same way" in {
    val avroData = MyExampleData.newBuilder().setSomeField("xyz").build()
    val serializedAvroData = avroData.toByteBuffer.array()
    val outputStream = new ByteArrayOutputStream()
    val encoder = EncoderFactory.get.binaryEncoder(outputStream, null)
    val writer = new SpecificDatumWriter[MyExampleData](classOf[MyExampleData])
    writer.write(avroData, encoder)
    encoder.flush()
    assert(outputStream.toByteArray sameElements serializedAvroData)
  }

0 个答案:

没有答案