You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Protobuf解析OnlineSequencer二进制文件仅返回文件大小问题

问题原因

Protobuf的Python API中,ParseFromString()方法的返回值本身就是成功解析的字节数,而非解析后的消息对象。解析得到的所有数据会直接填充到调用该方法的实例(即你代码中的sequence对象)中,你目前的代码刚好只打印了这个返回值,所以只会输出文件大小。

同时你当前代码还存在两个无意义操作:

  • 打印了尚未读取任何数据的空文件对象f
  • 打印了还未执行解析的空sequence实例

修正后的代码

import sequence_pb2

# 使用with上下文管理器自动处理文件关闭,避免资源泄露
with open('./test.sequence', 'rb') as f:
    binary_data = f.read()

sequence = sequence_pb2.Sequence()
# 解析数据,返回值为解析的字节数
parsed_size = sequence.ParseFromString(binary_data)

print(f"解析完成,共读取{parsed_size}字节数据")
# 打印完整的解析结果
print("序列内容如下:")
print(sequence)

# 也可以直接读取指定字段
print(f"\n序列BPM:{sequence.settings.bpm}")
print(f"音符总数量:{len(sequence.notes)}")

异常排查说明

如果执行修正后代码仍然没有输出预期的序列内容,可按以下顺序排查:

  • 确认你本地安装的protobuf库版本,和编译.proto文件所用的protoc版本一致,版本不兼容会导致静默解析失败
  • 确认test.sequence没有额外的文件头、加密、压缩等处理,内容是标准的Sequence结构Protobuf序列化二进制数据

内容的提问来源于stack exchange,提问作者ashduino101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:18:04