我有自定义对象: CustomKey
, CustomValue
我通过avro提供给编码器: CustomKeyCoder
, CustomValueCoder
.
因为我需要按kv[customkey,customvalue]分组,所以我注册了 KVCoder.of(new CustomKeyCoder, new CustomValueCoder)
. 自定义编码器将输入/输出流 Package 为数据输入/输出流,并使用avro数据写入/读取程序。
我遇到的问题是在kvcoder的解码中,当我们尝试解码 KV
我明白了 Forbidden IOException when reading from InputStream
. 如前所述,解码的关键部分工作正常,当输入流被传递到解码值时抛出错误。kvcoder为键和值重用相同的输入流我猜键解码读取整个流。为什么会这样?avro的使用有问题吗?
下面是上面要展示的一些代码:
//Coder
override def decode(inputStream: InputStream): CustomValue = {
val dataInputStream = new DataInputStream(inputStream)
val id = dataInputStream.readShort
underlying.decode(dataInputStream)
}
//Underlying
override def decode(inputStream: InputStream): CustomValue = {
val decoder = DecoderFactory.get().binaryDecoder(inputStream, null)
val record = datumReader.read(null, decoder)
CustomValue.decode(record)
}
暂无答案!
目前还没有任何答案,快来回答吧!