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

シリアル化されたデータは、テキスト ノードに入れる前に 16 進数または base64 でエンコードし、逆シリアル化する前にデコードする必要があります。テキスト ノードは文字列であり、文字列はバイナリ データのコンテナーではありません。

しかし、私は根本的な問題を理解していません。XML で証明書を表すための標準的な方法と標準 API がありますが、これは違います。

于 2012-10-22T22:48:50.897 に答える