3

プロジェクトでgoogleprotobufを使用したいと思います。

重要なのは、最初のバイトに基づいてメッセージを拒否または受け入れる基礎となるコードがあり、protobufについて知らないため、メッセージの最初のバイトを設定する必要があるということです。

したがって、このページには https://developers.google.com/protocol-buffers/docs/proto#scalar と記載されており、JavaのByteStringに対応するbytesフィールドを使用する必要があります。

bytes任意のバイトシーケンスを含めることができます。文字列ByteString

しかし、int値からByteStringを作成する方法がわかりません。私はこの方法を試しました:

ByteBuffer eventTypeBuffer = ByteBuffer.allocate(1);
eventTypeBuffer.put(0x1c);
ByteString eventType = ByteString.copyFrom(eventTypeBuffer);
System.out.println(eventType.size() + " " + eventTypeBuffer.array().length);

Header.Builder mh = Header.newBuilder();
mh.setEventType(eventType);

正しく動作せず、printlnは01を返します

4

3 に答える 3

4
ByteBuffer eventTypeBuffer = ByteBuffer.allocate(1);
eventTypeBuffer.put(0x1c);
eventTypeBuffer.flip();
ByteString eventType = ByteString.copyFrom(eventTypeBuffer);
System.out.println(eventType.size() + " " + eventTypeBuffer.array().length);

Header.Builder mh = Header.newBuilder();
mh.setEventType(eventType);
于 2013-05-26T20:52:09.273 に答える
3

protobufメッセージを「ブラックボックス」バイト文字列と見なします。最初のバイトを読み取った後にprotobufメッセージを取り出し、protobuf部分を処理します。

バイトバッファを作成する

Byte[] buf = new Byte[100]; //length as per your application

次に、アプリケーションに従って最初のバイトを指定します(最初のバイトに応じてメッセージを拒否または受け入れます)。protobufメッセージで埋めることができる残りのバイト。

于 2013-01-05T01:14:38.637 に答える
0

Guavaの使用:

ByteString byteStringFromInt(int in) {
  return ByteString.copyFrom(Ints.toByteArray(in));
}
于 2013-08-12T14:34:30.800 に答える