gpt4 book ai didi

java - XML 消息中接收到的 Java 对象的反序列化问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:55:04 24 4
gpt4 key购买 nike

我收到一条 XML 消息(通过 HttpURLConnection),其中包含序列化的 Java 对象。这是收到的 XML 消息:

<?xml version="1.0" encoding="UTF-16"?><Olive><Responses><Character>aced0005737200116f626a656374732e43686172616374657200000000000000000200034c00056974656d737400154c6a6176612f7574696c2f41727261794c6973743b4c00086c6f636174696f6e7400124c6a6176612f6c616e672f537472696e673b4c00046e616d6571007e00027870737200136a6176612e7574696c2e41727261794c6973747881d21d99c7619d03000149000473697a657870000000037704000000037400084954454d312d49447400084954454d322d49447400084954454d332d4944787400035858587400044a6f686e</Character></Responses></Olive>

我想要做的是反序列化 <Character> 中包含的 Java 对象元素。 (前四个字符“ace”表明我们正在处理序列化内容。到目前为止一切顺利。)

我使用此代码来获取 <Character> 中的字符并将它们反序列化为 Java 对象:

Node characterElement = responsesElementChildren.item(0);  // <Character>
String characterSerialized = characterElement.getTextContent();
ByteArrayInputStream bais = new ByteArrayInputStream( characterSerialized.getBytes() );
ObjectInputStream ins = new ObjectInputStream( bais );
objects.Character retrievedCharacter = (objects.Character) ins.readObject();

但是,上述操作失败,并且出现以下异常:

java.io.StreamCorruptedException: invalid stream header: 61636564
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at network.requests.RequestRetrieveCharacter.addResponse(RequestRetrieveCharacter.java:99)
at network.GameServer.ask(GameServer.java:151)
at Client.main(Client.java:43)

我无法判断接收到的序列化数据是否正常,所以我真的不知道问题是出在反序列化中还是实际上出在序列化中(在发送端,Java 对象被序列化并打包到 XML 消息中)。

非常欢迎任何提示。

谢谢!

最佳答案

序列化 java blob 头部的魔数(Magic Number)不是 ascii 字符串“ACED”,而是 0xACED,后跟版本半字(此处:0x0005)。您在该 xml 中看到的内容看起来应该被解释为十六进制表示形式,而不是 ascii 字符串。

关于java - XML 消息中接收到的 Java 对象的反序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22859722/

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