在Julia中查找协议缓冲区消息的大小

在Julia中查找协议缓冲区消息的大小,julia,protocol-buffers,Julia,Protocol Buffers,我查看了ProtoBuf.jl中的代码,没有看到任何明显的内容。给定Julia中协议缓冲区对象的一个实例,在实际调用writeproto()之前,是否有办法找出它需要多少字节 作为一个小背景,我想知道这一点,因为在protobuf消息之后,我正在发送一个大小合适的数据数组。protobuf文档不鼓励将大型数组作为消息的一部分合并,因此我的目的是发布:a)protobuf结构的大小,b)protobuf结构本身,以及c)数据数组。然后,消息的接收者可以进行必要的簿记,以读取protobuf内容和数

我查看了
ProtoBuf.jl
中的代码,没有看到任何明显的内容。给定Julia中协议缓冲区对象的一个实例,在实际调用
writeproto()
之前,是否有办法找出它需要多少字节

作为一个小背景,我想知道这一点,因为在protobuf消息之后,我正在发送一个大小合适的数据数组。protobuf文档不鼓励将大型数组作为消息的一部分合并,因此我的目的是发布:a)protobuf结构的大小,b)protobuf结构本身,以及c)数据数组。然后,消息的接收者可以进行必要的簿记,以读取protobuf内容和数据数组

与此同时,我想出了一个丑陋的解决办法:

write(iob, UInt32(0)) # set aside space for header size
headerSize = UInt32(writeproto(iob, rdmMessage.header))
sizeBytes = reinterpret(UInt8, [headerSize])
iob.data[1:4] = sizeBytes[:]
# Back to the respectable world
write(iob, rdmMessage.body[:])

不漂亮,但是如果其他人和我在同一条船上,它可能对他们有用。

writeproto()
用于在julia中生成proto-buf文件(
foo_pb.jl
文件)。所以我认为应该先创建它,然后在Julia中创建一个实例,对吗?@JunTian No,protobuf编译器,
protoc
用于创建Julia绑定
writeproto()
用于将Julia结构(协议缓冲区描述的实现)转换为用于传输的二进制形式。
writeproto()
的第一个参数是一个I/O流对象,它保存序列化数据。谢谢你纠正我。我认为在调用
writeproto
之前可以计算大小,但恐怕它没有在
ProtoBuf.jl
中公开/实现。