将protobuf消息转换为Java中的字符串以保持持久性

时间:2014-08-06 19:22:42

标签: java string encoding protocol-buffers base32

我正在开发一个项目,用于存储键/值对中的所有数据。键和值都是字符串。改变这种情况超出了目前的范围。每个数据概念都由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编码吗?请注意,将数据类型从字符串更改为字节[]当前超出了范围。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果必须将编码的消息存储为文本,则应使用base64编码。 Base32也可以工作,但base64更紧凑,更标准化。

使用toStringUtf8()不起作用,因为编码的消息不是UTF-8。因此,这种方法会破坏您的数据。