java protobuf如何从int创建ByteString

     2023-02-16     153

关键词:

【中文标题】java protobuf如何从int创建ByteString【英文标题】:java protobuf how to create ByteString from int 【发布时间】:2012-09-05 08:19:01 【问题描述】:

我想在我的项目中使用 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

【问题讨论】:

似乎 protobuf 产生特定格式的字节,所以我不能指望字节类型的第一个字段成为消息的第一个字节 你考虑过写字节然后写协议缓冲区消息。正如 Nikolay 所说,Protocol-Buffers 控制着消息中写入的内容 【参考方案1】:
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】:

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

创建一个字节缓冲区

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

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

【讨论】:

【参考方案3】:

使用番石榴:

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

【讨论】:

JAVA:如何从 byte[] 创建 .PNG 图像?

】JAVA:如何从byte[]创建.PNG图像?【英文标题】:JAVA:Howtocreate.PNGimagefromabyte[]?【发布时间】:2014-04-1713:27:03【问题描述】:我看过一些代码源,但是看不懂……我使用Java7请如何将RGB(红、绿、蓝)字节数组(或类似的东西)转... 查看详情

protobuf协议实现原理

参考技术Aprotobuf是Google开源的一款支持跨平台、语言中立的结构化数据描述和高性能序列化协议,此协议完全基于二进制,所以性能要远远高于JSON/XML。由于出色的传输性能所以常见于微服务之间的通讯,其中最为著名的是Google... 查看详情

如何在 protobuf 消息中建模 Java 原始 int[] 数组

】如何在protobuf消息中建模Java原始int[]数组【英文标题】:HowtomodelJavaprimitiveint[]arrayinprotobufmessage【发布时间】:2018-11-3023:13:35【问题描述】:我是Google协议缓冲区的新手,并试图通过protobuf消息在java中对原始int[]数组进行建模。... 查看详情

如何在 Go 编程中将 []byte 转换为 int

】如何在Go编程中将[]byte转换为int【英文标题】:Howtoconvertfrom[]bytetointinGoProgramming【发布时间】:2012-06-2609:55:21【问题描述】:我需要通过TCP创建一个客户端-服务器示例。在客户端,我读取了2个数字并将它们发送到服务器。我... 查看详情

protobuf数据格式

...tocolBuffers是一种和语言平台都没关的数据交换格式。关于Protobuf在iOS下的使用请看上篇文章iOS的ProtocolBuffer简单使用Protobuf序列化后的二进制数据消息非常的紧凑,这得益于Protobuf所采用的VarintVarint是一种紧凑的表示数字的方法,... 查看详情

java示例代码_:如何将int[]转换为byte[]

java示例代码_:如何将int[]转换为byte[] 查看详情

C++ google protobuf:如何从扩展的 FieldDescriptor 创建 MutableExtension

】C++googleprotobuf:如何从扩展的FieldDescriptor创建MutableExtension【英文标题】:C++googleprotobuf:HowtocreateMutableExtensionfromextension\'sFieldDescriptor【发布时间】:2019-04-2302:29:19【问题描述】:我有一个包含扩展的消息的原型messageMsgAextensions10... 查看详情

java中int与byte相互转换

...1:int到byte首先我们实现int和byte之间的转换,思路如下:创建一个byte数组,长度为4。byte[0]是最高位,byte[1]是次高位,byte[2]是次次高位,byte[3]是最低位,在将int数据右移24位,然后与0xFF相与即可得到byte[0]。在将 查看详情

java中byte[]转换成int

...流末尾,返回-1。通过ByteArrayInputStream的源码可以看到是如何从byte转到intpublicsynchronizedintread()return(pos<count)?(buf[pos++]&0xff):-1;注意,不是自动转的,需要强制做处理。参考技术A你可以用StringTokenizer,StringTokenizert=newStringTokenizer(&... 查看详情

java中byte是啥类型

和int有什么区别java中byte是字节型。javabyte作为最小的数字来处理的,因此它的值域被定义为-128~127,byte的用作计数的时间远少于用表达基本内存单元的时间。比如从stream里读入一个双字节字符,我们先收到2个byte。为了把byte转... 查看详情

如何在 Java 中从原始字节 [] 创建 BMP 文件

】如何在Java中从原始字节[]创建BMP文件【英文标题】:HowtocreateaBMPfilefromrawbyte[]inJava【发布时间】:2010-11-1416:35:23【问题描述】:我有一个C++应用程序,它与相机通信并获取原始图像数据。然后我在C++中有一个Byte[],我想用JNI将... 查看详情

在 C# 中将 int[] 转换为 byte[]

...[]inC#【发布时间】:2011-08-1907:04:36【问题描述】:我知道如何做到这一点:通过创建一个必要大小的字节数组并使用for循环从int数组中转换每个元素。我想知道是否有更快的方法,因为如果int大于sbyte,上述方法似乎会中断。【... 查看详情

java中byte数组与int类型的转换(两种方式)

...者接收的数据都是byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型。下面有两种方式。 [java] viewplaincopy  public&nbs 查看详情

从 byte[] 创建一个临时 java.io.File

】从byte[]创建一个临时java.io.File【英文标题】:Createatemporaryjava.io.Filefrombyte[]【发布时间】:2013-10-0103:15:59【问题描述】:我必须使用像saveAttachment(Attachmentattachment)这样的现有方法,其中Attachment有一个Fileattribute。我的问题是我... 查看详情

Java:如何从一组图像创建电影?

】Java:如何从一组图像创建电影?【英文标题】:Java:HowdoIcreateamoviefromanarrayofimages?【发布时间】:2012-02-1000:31:09【问题描述】:我基本上有一个字节矩阵。每行(意思是byte[])代表一个图像。如何从中创建电影(任何格式-avi、... 查看详情

如何将 int[] 转换为 byte[]

】如何将int[]转换为byte[]【英文标题】:Howtoconvertint[]tobyte[]【发布时间】:2010-11-0808:01:23【问题描述】:我有一个表示RGB图像的整数数组,我想将其转换为字节数组并将其保存到文件中。在Java中将整数数组转换为字节数组的最... 查看详情

java如何创建一个类或方法能够给出指定位数的一个随机“大数”?

java如何创建一个类或方法能够给出指定位数的一个随机“大数”?例如bignumb(100000)可以给出一个100000位的数字,注意是100000位。可否结合BigInteger和Random?最好有具体代码,谢谢!一个大数一般都是使用数组存储的。比如使用... 查看详情

为啥允许从 int 到 byte 但不允许从 long 到 int 的隐式缩小转换?

】为啥允许从int到byte但不允许从long到int的隐式缩小转换?【英文标题】:Whyisanimplicitnarrowingconversionallowedfrominttobytebutnotfromlongtoint?为什么允许从int到byte但不允许从long到int的隐式缩小转换?【发布时间】:2018-06-1001:05:44【问题描... 查看详情