3

我想在我的项目中使用 google protobuf。

关键是我必须设置非常消息的第一个字节,因为底层代码根据第一个字节拒绝或接受消息并且它不知道 protobuf。

所以这个页面说 https://developers.google.com/protocol-buffers/docs/proto#scalar 我必须使用与 Java 中的 ByteString 对应的字节字段。

bytes 可以包含任意的字节序列。字符串字节串

但我不知道如何从 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 给出 0 1

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

Using Guava:

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