如何在proto buffs中编码byte []

Usm*_*ail 38 protocol-buffers

proto buff中是否有等效的int8或byte类型?我想发送一个字节数组对象.

Luk*_*hne 44

http://code.google.com/apis/protocolbuffers/docs/proto.html#scalar

bytes
Run Code Online (Sandbox Code Playgroud)

  • 不,根据文档,相应的Java类型是`ByteString`.您可以使用`toByteArray`方法获取字节数组. (9认同)

小智 10

但是,如果您要存储单个字节,我建议使用Int32.它是一个"变体"类型变量,它将根据存储在其中的数据改变大小.因此,如果要存储单个字节,它将是最小的结构.实际上,byteS数据类型相当大.这是因为字节结构包含索引长度和其他属性等数据.

在序列化时,我注意到从存储在byteS中的单个字节切换到int32时,大小差异大约为一半.

但是请注意,这并不适用于多个字节存储在字节,我怀疑会比存储单个的Int32小得多.


小智 7

ByteString 类提供了将一些类型转换为 protobuff 类型“bytes”或 ByteString 的方法

public static ByteString CopyFrom(params byte[] bytes);
public static ByteString CopyFrom(string text, Encoding encoding);
Run Code Online (Sandbox Code Playgroud)