gpt4 book ai didi

Java - 对象到固定字节数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:41 31 4
gpt4 key购买 nike

我需要通过 TCP/套接字连接到第三方系统并检索一些数据。将要发送的数据格式是固定长度格式和二进制格式。

请求示例:

short MessageID = 5;
int TransactionTrace = 1;

基本上,我必须向第三方系统发送 6 个字节。十六进制数据:000500000001

我曾尝试在 Java 中执行以下操作,但它不起作用。

  1. 创建一个包含两个变量和正确数据类型(messageID 和 transactionTrace)的类
  2. 将类序列化为字节数组

序列化返回太多字节。

有人可以帮忙吗?

谢谢。

Java 类:

public final class MsgHeader implements Serializable  {

public short MessageID;
public int TransactionTrace;
}

序列化:

MsgHeader header = new MsgHeader(); 
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = null;

try
{
out = new ObjectOutputStream(bos);
out.writeObject(header);
byte[] yourBytes = bos.toByteArray();

System.out.println("Hex Data : " + getHex(yourBytes));
}

最佳答案

Java 序列化使用它自己的格式,这不太可能与您所追求的相匹配。

我会创建一个单独的 marshaller类使用 ByteBuffer以正确的格式写出值。这也将允许指定大端或小端。

private static class Message {
short messageID = 5;
int transactionTrace = 1;
public short getMessageID() {
return messageID;
}

public int getTransactionTrace() {
return transactionTrace;
}
}

private static class MessageMarshaller {
public static byte[] toBytes(Message message) {
ByteBuffer buffer = ByteBuffer.allocate(6);
buffer.order(ByteOrder.BIG_ENDIAN);
buffer.putShort(message.getMessageID());
buffer.putInt(message.getTransactionTrace());
return buffer.array();
}
}

public static void main(String[] args) {
System.out.println(Arrays.toString(MessageMarshaller.toBytes(new Message())));
// ==> Outputs [0, 5, 0, 0, 0, 1]
}

关于Java - 对象到固定字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32072748/

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