gpt4 book ai didi

java - 序列化 Java 对象时如何解决 StreamCorruptedException?

转载 作者:行者123 更新时间:2023-12-01 05:03:43 25 4
gpt4 key购买 nike

很抱歉,因为我看到了有关此主题的帖子,但似乎没有一个能解决我的问题。所以我会尽量说得非常具体。当我尝试在 ByteArrayInputStream

上打开 ObjectInputStream 时,收到 StreamCorruptedException

我需要将对象 (X509Certificate) 输出到 XML 文件。我的序列化代码如下所示:

  ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputSream(bos);
oos.writeObject(x509.getData()); // x509 is a DOM Element
oos.close();
bos.close();

XML 文档看起来没问题。我的输入代码如下所示:

  // elem is a DOM Element with contents placed in Context
ByteArrayInputStream bis = new ByteArrayInputStream(
elem.getTextContext().getBytes())
ObjectInputStream ois = new ObjectInputStream(bis);
X509Certificate x509 = (X509Certificate) ois.readObject();
ois.close();
bis.close();

我得到的堆栈跟踪主要是通过我自己的代码,而不是 JVM 内部的任何内容,因此很难跟踪。这就是它的内容:

  java.io.StreamCorruptedException: invalid stream header: 5B0A5B0A
at java.io.ObjectInputStream.readStreamHeader (ObjectInputStream.java:783)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
. my code
. my code

感谢您的帮助。

最佳答案

您需要在将序列化数据放入文本节点之前对其进行十六进制或base64编码,并在反序列化之前对其进行解码。文本节点是字符串,而字符串不是二进制数据的容器。

但我不明白根本的问题。有用于在 XML 中表示证书的标准方法和标准 API,但不是这样。

关于java - 序列化 Java 对象时如何解决 StreamCorruptedException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13015046/

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