首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反序列化,Avro中的固定数据类型

反序列化,Avro中的固定数据类型
EN

Stack Overflow用户
提问于 2021-08-24 17:03:02
回答 1查看 295关注 0票数 1

我是avro的新手,我有一个要反序列化的avro文件。有些架构使用固定类型的数据来存储MAC地址。下面的架构是其中之一,并作为一种类型在不同的架构中使用。

MAC地址的架构如下:

代码语言:javascript
复制
{
    "type": "fixed",
    "name": "MacAddress",
    "size": 6
}

我使用以下方法将数据的第一条记录写入文本文件:

代码语言:javascript
复制
from avro.datafile import DataFileReader
from avro.io import DatumReader

reader = DataFileReader(open("data.avro", "rb"), DatumReader())
count = 0
for record in reader:
    if count == 0:
        with open('first_record.txt', 'w') as first_record:
            first_record.write(str(record))
    elif count > 0: break
    count = count + 1
reader.close()

上述MAC地址出现在反序列化数据中,如下所示:

代码语言:javascript
复制
"MacAddress":"b""\\x36\\xe9\\xad\\x64\\x2d\\x3d",

我知道\x表示以下是十六进制值。这应该是“36:E9:广告:64:2D:3D”,对吗?“b”“样式”值是否为固定类型的预期输出?

另外,一些值如下所示:

代码语言:javascript
复制
"Addr":"b""j\\x26\\xb7\\xda\\x1d\\xf6"

"Addr":"b""\\x28\\xcb\\xc5v\\x14%" 

为什么这些是MAC地址?j,%字符是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-24 21:37:03

是否为固定类型的预期输出值“b”“样式”?

是的,因为固定类型代表字节,而在Python上,字节字符串是用一个前置的b来表示的。看起来这里有很多额外的引号,我猜这是因为你在做一些像str(record)这样的事情,这可能导致了额外的反斜杠和引号字符。例如:

代码语言:javascript
复制
>>> str(b"\xae")
"b'\\xae'"

,为什么这些是MAC地址?j,%字符是什么意思?

你确定这些是相同的记录类型吗?关键是Addr而不是MacAddress,因此它似乎是一种不同的记录类型和模式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68911364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档