Protocol buffers &引用;无法分析输入";从Google protocol buffers protoc命令中为“`--decode_raw``

Protocol buffers &引用;无法分析输入";从Google protocol buffers protoc命令中为“`--decode_raw``,protocol-buffers,protoc,Protocol Buffers,Protoc,我有一个from,特别是1.4MB。protoc命令使用--decode\u raw选项表示它“将原始标记/值写入标准输出”。然而,我不断地得到这个错误: $ cat liechtenstein-latest.osm.pbf | protoc --decode_raw Failed to parse input. 我已经直接从Google编译并安装了protobuf库,2.6.1版是当前版本 这个文件是有效的,各种读取pbf文件(,)的OpenStreetMap工具都可以很好地读取它 有什么不

我有一个from,特别是1.4MB。
protoc
命令使用
--decode\u raw
选项表示它“将原始标记/值写入标准输出”。然而,我不断地得到这个错误:

$ cat liechtenstein-latest.osm.pbf | protoc --decode_raw
Failed to parse input.
我已经直接从Google编译并安装了protobuf库,2.6.1版是当前版本

这个文件是有效的,各种读取pbf文件(,)的OpenStreetMap工具都可以很好地读取它


有什么不对劲吗?我如何才能让
--解码原始文件
工作?我做错什么了吗?

OpenStreetMap
.osm.pbf
格式不是原始协议缓冲区。此处记录了格式:

关键报价:

格式是以下内容的重复序列:

  • int4:BlobHeader消息的长度(按网络字节顺序)
  • 序列化BlobHeader消息
  • 序列化Blob消息(大小在标头中给定)
因此,您需要首先读取四个字节,将它们解释为整数(big-endian),然后读取那么多字节并将其解析为
BlobHeader
,这反过来会告诉您要读取多少字节并将其解析为
Blob

protoc
工具不会自动执行此操作,因为它不知道此格式。可能有一个特定于OSM的工具可以使用