java protobuf如何从int创建ByteString

时间:2012-09-05 08:19:01

标签: java constructor byte protocol-buffers

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

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

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

  

bytes可包含任意字节序列。 string 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给出0 1

3 个答案:

答案 0 :(得分:3)

将protobuf消息视为“黑盒子”字节串。读完第一个字节后再取出protobuf消息,然后处理protobuf部分。

创建字节缓冲区

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

然后根据您的应用程序给出第一个字节(根据第一个字节拒绝或接受消息)。您可以使用protobuf消息填充剩余的字节。

答案 1 :(得分:3)

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);

答案 2 :(得分:0)

使用番石榴:

ByteString byteStringFromInt(int in) {
  return ByteString.copyFrom(Ints.toByteArray(in));
}