[英]Deserializing Byte Buffer to Avro
我想将数据从字节数组反序列化为 Avro 生成的类。
数据来自一个文件映射,该文件映射是在另一个用 C++ 编写的进程中编写的,我无法控制。 本质上,数据来自一个更大的结构,其中每个项目都被转换为字节,然后放入一个数组中。 例如
struct Sample {
int firstInt;
float firtFloat;
int secondInt;
...
}
前 4 个字节是firstInt
数据,接下来的 4 个字节是浮点数,依此类推。 当我尝试读取字节时
AvroClassName.fromByteBuffer(bBuffer(0, 500));
我收到一个错误:
Exception in thread "main" org.apache.avro.message.BadHeaderException: Unrecognized header bytes: 0x5A 0x03
我认为发生这种情况是因为 Avro 期望缓冲区数据采用 Avro 本身序列化的特定格式。
我可能会使用某种构建器,手动将缓冲区的每个部分映射到 Avro 对象字段,但由于此类中有数百个字段,因此这不是最佳策略。
是否有任何方法可以将数据反序列化为 Avro 生成的对象? Avro 类中字段的顺序与它们在字节缓冲区中出现的顺序相同。
您描述的二进制数据不会反序列化为 avro。
我认为发生这种情况是因为 Avro 期望缓冲区数据采用 Avro 本身序列化的特定格式。
您已经回答了自己的问题,但想想为什么不太可能有您想要的通用实用方法是很有趣的。
这两个歧义可能有助于解释为什么您的二进制数据需要一些特殊处理。 您可能可以根据您对序列化机器和/或编译器的了解来解决这些问题。 然而,这通常超出了一般序列化库的范围,后者通常仅限于序列化和反序列化它们自己的二进制数据格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.