1

ObjectOutputStream/ObjectInputStream を内部クラスにすることは可能ですか? OK を書き込んで、作成されたファイルを調べることができますが、ObjectInputStream を使用して読み戻そうとすると、オブジェクト o = oos.readObject(); を読み込もうとしているだけで EOFException が発生します。

  1. 同じ File オブジェクトを使用して両方のストリームを開くので、それは問題ではありません。
  2. 内部クラスの性質とは無関係のようです - public int だけを持つクラスは、より複雑なクラスと同じように失敗します。

次に進み、通常のクラスを作成し、送信者クラスでインスタンス化する必要がありますが、可能かどうか、可能でない場合は理由がわからないまま立ち去るのは嫌いです。

更新: 問題の原因となった関連する問題:

A. ObjectOutputStream と追加で書き込まれたファイルを再度開くことはできません。2 番目のヘッダーが書き込まれ、ファイルが破損します。

B. ByteOutputStream を使用してハッシュ ダイジェストを実行するために HashMap をシリアル化することは機能しません。これは、ObjectOutputStream ファイルから HashMap を読み戻すときに、ペアの順序が異なるため、ByteOutputStream から異なる byte[] を取得する可能性が非常に高いためです。内容は同じですが、byte[] (およびハッシュ ダイジェスト) は異なります。

これが誰かの時間を節約するのに役立つことを願っています。

4

2 に答える 2

2

これは私のために働きます。ソリューションとの違いを探してください。

public class Example は Serializable を実装します {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        new Example().run();
    }

    private void run() は IOException、ClassNotFoundException をスローします {
        内側の内側 = 新しい内側 ();
        内部.x = 5;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ObjectOutputStream outputStream = new ObjectOutputStream( out );
        outputStream.writeObject( 内部 );

        ByteArrayInputStream in = new ByteArrayInputStream( out.toByteArray() );
        ObjectInputStream inputStream = new ObjectInputStream( in );
        内部 inner2 = (内部) inputStream.readObject();

        System.out.println( inner2.x );
    }

    class Inner は Serializable を実装します {
        int x;
    }
}

于 2009-10-22T20:30:47.123 に答える
2

サンプルコードを少し含めていただけますか? 最も明白な説明は、出力ストリームを読み込もうとする前に、出力ストリームを閉じたりフラッシュしたりしていないということです。

于 2009-10-22T20:05:32.827 に答える