当前位置: 首页 > 知识库问答 >
问题:

java protobuf如何从int创建ByteString

杨雪松
2023-03-14

我想在我的项目中使用谷歌protobuf。

关键是我必须设置每个消息的第一个字节,因为底层代码拒绝或接受基于第一个字节的消息,而它不知道protobuf。

所以这页说https://developers.google.com/protocol-buffers/docs/proto#scalar我必须使用与Java中的ByteString相对应的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给出0 1

共有3个答案

荀裕
2023-03-14

使用番石榴:

ByteString byteStringFromInt(int in) {
  return ByteString.copyFrom(Ints.toByteArray(in));
}
胥英奕
2023-03-14

将protobuf消息视为字节的“黑盒”字符串。读取第一个字节后获取protobuf消息,然后处理protobuf部分。

创建字节缓冲区

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

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

康元凯
2023-03-14
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);
 类似资料:
  • 我已经看到了这个问题:从数组创建ArrayList 然而,当我用下面的代码尝试该解决方案时,它并不是在所有情况下都有效: 我做错了什么?代码不应该

  • 问题内容: 我看到了一个问题:从数组创建ArrayList 但是,当我使用以下代码尝试该解决方案时,它并不能在所有情况下都有效: 我在这里做错了什么?代码不应该编译就好吗? 问题答案: 问题在 是,被认为是一个单一的,因为基本数组从延伸实例。如果你有这样的工作,而不是因为现在你要发送的数组。 根据您的评论:如果您仍然想使用一个(或另一个原始类型的数组)作为主要数据,那么您需要使用wrapper类创

  • 问题内容: 目前,每当我需要从数组创建流时,我都会 有一些直接的方法可以从数组创建流吗? 问题答案: 您可以使用Arrays.stream Eg 您也可以使用@fge所提到的,它看起来像 但是note 将返回,而如果您传递一个type数组,则将返回。因此,简而言之,您可以观察两种方法之间的区别,例如 将原始数组传递给时,将调用以下代码 当您将原始数组传递给以下代码时,将被调用 因此,您得到不同的结

  • `公共类LoginSuccess扩展AppCompatActivity{Toolbar Toolbar;TabLayout TabLayout;ViewPager ViewPager;ViewPagerAdapter ViewPagerAdapter; }`

  • 问题内容: 尽管有一些阅读,但我遇到了一些我仍难以理解的代码。调用了一个方法,该方法需要两个参数,其中一个是Runnable。尽管有一个lambda,但没有传递Runnable对象。 例如: 所以我的问题是,你能解释一下如何从lambda创建一个Runnable吗,也请有人解释一下语法 () -> {}。具体来说,()括号是什么意思? 谢谢。 问题答案: Lambda可以在需要功能接口的任何地方使

  • 目前,每当我需要从数组创建流时,我都会