【问题标题】:Convert protobuf message to string in Java for persistency将 protobuf 消息转换为 Java 中的字符串以实现持久性
【发布时间】:2014-08-06 19:22:41
【问题描述】:

我正在开发一个将所有数据存储在键/值对中的项目。键和值都是字符串。改变它超出了当前的范围。每个数据概念都由一个 protobuf 消息表示。

所以,我必须将 protobuf 消息存储为字符串。将消息存储为 message.toByteString().toString() 就足够了吗?或者我应该对 byte[] 进行编码,例如使用 Base32 编码?

编辑

使用 ByteString 进行持久性似乎不起作用:

Message m = ...;
ByteString s = m.toByteString();
ByteString s_ = ByteString.copyFromUtf8(s.toStringUtf8());
Message.PARSER.parseFrom(s_);

在解析协议消息时,输入意外在字段中间结束。这可能意味着输入被截断或嵌入的消息误报了自己的长度。

那么您是否建议在 m.toByteArray() 上使用 Base32 编码?请注意,当前将数据类型从 string 更改为 byte[] 超出范围。

谢谢!

【问题讨论】:

  • 我添加了额外的信息。查看我的编辑。

标签: java string encoding protocol-buffers base32


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2012-12-26
    • 2016-01-15
    • 2011-12-09
    相关资源
    最近更新 更多