我需要连接到第三方系统并通过TCP / socket检索一些数据。 将要发送的数据格式是固定长度格式和二进制格式。
请求示例:
short MessageID = 5;
int TransactionTrace = 1;
基本上,我必须向第三方系统发送6个字节。十六进制数据:000500000001
我尝试在Java中执行以下操作,但它不起作用。
序列化返回太多字节。
有人可以帮忙吗?
谢谢。
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));
}
答案 0 :(得分:4)
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]
}