zeromq - 如何在 PyZMQ 中解码 JeroMQ 字节数组?
问题描述
我正在尝试将 JeroMQ 发布者连接到 PyZMQ 订阅者。它运行良好,但我不知道如何解码/反序列化我在 Python 端获得的数据。
例如,这是我从 Java 发送的一个字节数组:[10, 10, 7, 55, 79]
。我的目标是在 Python 中恢复相同的整数数组。在实践中,我b"\n\n\xf97O"
在 Python 端得到了这个。我希望 abytes.decode("utf-8")
可能会让我得到类似的东西101075579
,但显然 utf-8 是错误的编解码器。你知道是什么样的物体b"\n\n\xf97O"
吗?
这是我正在使用的代码:
Java端
ZContext context = new ZContext();
ZMQ.Socket broadcastSocket = context.createSocket(ZMQ.PUB);
broadcastSocket.bind("tcp://*:55555");
byte[] payload = new byte[] {10, 10, 7, 55, 79};
broadcastSocket.send(payload);
Python端
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket = setsockopt_string(zmq.SUBSCRIBE, "")
socket.connect("tcp://127.0.0.1:55555")
while 1:
message = socket.recv()
print(message) # outputs b"\n\n\xf97O"
你知道如何解决这个问题吗?请注意,ZMQ.Socket.sendMore(String)
发送的对象确实被 Python 识别为字节字符串,但我不确定如何正确解析它们。
提前致谢。
解决方案
它是一个字节对象,也称为字节串。如果你只是将它转换为一个列表,你会得到一个整数列表,每个字节一个:
>>> list(b"\n\n\xf97O")
[10, 10, 249, 55, 79]
你也可以直接下标和迭代它,甚至不使用list
,例如message[4]
将是 79。
(我不确定 7 和 249 之间的差异,但我猜您最终错误地复制了某些内容,或者使用了来自两次不同运行的数据)。
推荐阅读
- sql - Oracle SQL 字符串以“987”或“I”开头
- node.js - 从计划的 Windows 任务调用时,节点的 spawn/exec 不工作
- laravel - Laravel Lighthouse Graphql belongsToMany 具有枢轴值的突变
- typescript - Rxjs 将 API 结果 Observable 转换为服务函数中的另一个 Observable
- python - Matplotlib:从保存图像的边缘删除白色边框
- css - Flexbox flex-direction 在 Firefox/IE/Edge 上隐藏滚动
- python - 将大型图像数据集附加到数组
- excel - 在同步位置 (SharePoint) 从 VBA 调用 PowerShell 脚本
- android - Android 4.4 上的 SSL 证书问题:找不到证书路径的信任锚
- python - 烧瓶 SQLAlchemy updated_on