我正在开发一个项目,用于存储键/值对中的所有数据。键和值都是字符串。改变这种情况超出了目前的范围。每个数据概念都由protobuf消息表示。
因此,我必须将protobuf消息存储为字符串。是否足以将消息存储为message.toByteString()。toString()?或者我应该使用Base32编码来编码byte [],例如?
修改
使用ByteString进行持久性似乎不起作用:
Message m = ...;
ByteString s = m.toByteString();
ByteString s_ = ByteString.copyFromUtf8(s.toStringUtf8());
Message.PARSER.parseFrom(s_);
解析协议消息时,输入意外地在字段中间结束。这可能意味着输入被截断,或者嵌入的消息误报了自己的长度。
那你建议在m.toByteArray()上使用Base32编码吗?请注意,将数据类型从字符串更改为字节[]当前超出了范围。
谢谢!
答案 0 :(得分:1)
如果必须将编码的消息存储为文本,则应使用base64编码。 Base32也可以工作,但base64更紧凑,更标准化。
使用toStringUtf8()
不起作用,因为编码的消息不是UTF-8。因此,这种方法会破坏您的数据。