gpt4 book ai didi

java - 如何在字节数组 Java 中表示 header 值和实际消息?

转载 作者:行者123 更新时间:2023-11-28 02:39:36 25 4
gpt4 key购买 nike

我需要创建一个字节数组,其中最初包含 header 值,而我的实际消息将出现在 header 值之后。

我的 header 值将包含 - data center 是一个字符串,client_id 是整数,pool_id 也是整数,data_count 也是一个整数。

我在 header 值之后的实际消息是 - hello world

在我的例子中,我的 header 长度可能会增加,所以我需要将其初始化为一个变量,以便以后可以根据需要增加它。

我对如何在这里使用字节数组有点困惑。我如何以网络字节顺序在字节数组中表示它,以便 c++ 程序可以在 ubuntu 12.04 机器上正确解码它?

最佳答案

您可以使用 Protocol Buffers表示消息(标题和内容)。它将处理语言和不同平台之间的转换。此外,它还为进一步扩展和支持多个消息版本提供了空间。

对于您的示例,您可以定义消息格式(例如 messageModel.proto):

package common; 

option java_package = "my.java.package";
option java_outer_classname = "MessageProto";

message MyMessage {
optional string dataCenter = 1 [default = DEFAULT_DC];
optional int64 clientId = 2;
optional int64 poolId = 3;
optional int64 dataCount = 4;
optional string body = 5;
}

然后使用 protoc 编译如下:

protoc -I src/java/ --java_out=src/java/ messageModel.proto

您将生成传输对象和实用程序类以将它们从一个端点编码到另一个端点(甚至代表不同的消息)。请查看 java tutorial了解更多详情。

要从 java 创建一个 MyMessage,您将能够执行如下操作:

MessageProto.MyMessage.Builder mb = MessageProto.MyMessage.newBuilder();
mb.setDataCenter("aDC");
mb.setClientId(12);
mb.setPoolId(14);
mb.setDataCount(2);
mb.setbody("hello world");
MessageProto.MyMessage message = mb.build();

要将消息转换为字节数组,您将使用:message.toByteArray()

如果 C++/C 是您的目标,您还需要生成(从同一模型)C 构建器和对象。要解码消息,您将执行以下操作:

MessageProto.MyMessage message = MessageProto.MyMessage.parseFrom(buffer);

其中 buffer 将代表接收到的内容。

如果这只是家庭作业,那么您可以使用序列化标题和正文消息DataOutputStream,但我建议也调查 Protocol Buffers。

关于java - 如何在字节数组 Java 中表示 header 值和实际消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26419763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com