2009-04-01 10 views
0

私はTCPを介してシリアル化を使用してメッセージを転送するクライアントとサーバーアプリケーションを持っています。オブジェクトをデシリアライズするときに次のエラーが発生します。Java StreamCorruptedException

この問題の原因を分析する上で、

java.io.StreamCorruptedException: invalid stream header: 383D4649 
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source) 
    at java.io.ObjectInputStream.<init>(Unknown Source) 
    at com.aqua.NmsApi.ResiliantTCPServer$ServerThread.run(ResiliantTCPServer.java:248) 
    at java.lang.Thread.run(Unknown Source) 

答えて

1

シリアル化されたデータの先頭には何か問題があります。おそらく、シリアライズされたデータをキャプチャし、それを見て最初から見る必要があります。そのアスキーストリームは '8 = FI'です。

+0

これらは、サーバープロセスのリモートログです。ユーザーがサーバーを再始動し、それが動作を開始しました。しかし、私はまだ原因を分析しています。 – richs

+0

一時的な通信の問題があったことはあまりありません。元の例外位置を中心に例外処理を追加し、より多くのデータをキャプチャできるかどうかを確認する必要があります。 –

1

そのための2つの理由があります。

ストリームが実際に破損している
  • (すなわち、何を読んでいることは、あなたが他の最後に書いたものと異なっています)。その場合は、各内容(放出および受信)をローカルファイルに書き込んで比較する必要があります。

  • あなたが使用しているObjectInputStreamの実装で必要とされるマジックナンバーは、異なるバージョンのJavaベースパッケージを使用しているなど、両端で異なります。これらの定数はObjectStreamConstantsで宣言されています。チェックする必要があります。

0

ソケットあたり1つのObjectInput/OutputStreamを使用していますか?これらを同じ入出力ストリームで再作成することは、このようなエラーの一般的な原因です。

関連する問題