apachebeam/dataflow:kvcoder破坏inputstream进行解码

zour9fqk  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(151)

我有自定义对象: 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)
  }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题