[英]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.