gpt4 book ai didi

python - 使用元类/反射的 python 中 udp 缓冲区的对象类型

转载 作者:行者123 更新时间:2023-12-01 06:19:18 25 4
gpt4 key购买 nike

是否可以使用元类/反射从 python 中的 udp 套接字收到的消息中提取对象类型或类名?

场景是这样的:

  1. 在套接字上接收 udp 缓冲区。

  2. UDP 缓冲区是一个序列化的二进制字符串(消息)。但目前尚不清楚消息的类型。因此无法反序列化为适当的消息。

    现在,我的问题是我能否知道序列化二进制字符串(recvd 作为 UDP 缓冲区)的类名,以便我可以反序列化为适当的消息并进一步处理。

提前致谢。

最佳答案

您从 udp 套接字收到的是一个字节字符串——这就是实际上那里的所有“对象类型或类名”。如果字节字符串被​​构建为序列化对象(例如通过 picklemarshal 等),那么您可以将其反序列化回对象(例如使用 pickle .loads),然后然后反省你内心的内容。但大多数字节字符串都是以其他方式构建的,并且当您尝试从中加载时会引发异常;-)。

编辑:OP的编辑提到该字符串是“序列化对象”,但仍然没有说明是什么序列化方法产生了它,这使得一切都不同。 pickle (对于范围更窄的 marshal 类型),在它们生成的字符串上放置足够的信息(通过模块的 .dumps 函数) )它们各自的 loads 函数可以反序列化回适当的类型;但其他方法(例如,struct.pack)不会将此类元数据放入它们生成的字符串中,因此如果没有其他“带外”格式指示,则反序列化是不可行的正在使用。那么,O.P.,最初是如何生成序列化的字节字符串的......?

关于python - 使用元类/反射的 python 中 udp 缓冲区的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1487582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com