0

すべてのデータをキーと値のペアで保存するプロジェクトに取り組んでいます。キーと値はどちらも文字列です。これを変更することは、現在の範囲を超えています。各データの概念は、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 エンコーディングを使用することを提案しますか? データ型を string から byte[] に変更することは現在範囲外であることに注意してください。

ありがとうございました!

4

1 に答える 1

1

エンコードされたメッセージをテキストとして保存する必要がある場合は、base64 エンコードを使用する必要があります。Base32 も機能しますが、base64 はもう少しコンパクトで標準化されています。

エンコードされたメッセージが UTF-8 ではないため、使用toStringUtf8()できません。したがって、このアプローチではデータが破損します。

于 2014-08-07T21:59:58.773 に答える