1

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

我需要将对象 ( 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

谢谢你的帮助。

4

1 回答 1

0

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

但我不明白根本问题。有标准的方法和标准的 API 来表示 XML 中的证书,但事实并非如此。

于 2012-10-22T22:48:50.897 回答