java-内部クラスのIO
-
05-07-2019 - |
質問
内部クラスをObjectOutputStream / ObjectInputStreamすることは可能ですか? OKを書いて、作成されたファイルを調べることができますが、ObjectInputStreamを使用してそれを読み戻そうとすると、Object o = oos.readObject();
を読み込もうとするとEOFExceptionが返されます。- 同じFileオブジェクトを使用して両方のストリームを開くので、それは問題ではありません。
- 内部クラスの性質からは独立しているようです-public intだけのクラスは、より複雑なクラスと同じように失敗します。
先に進み、通常のクラスを作成し、送信側クラスでインスタンス化する必要がありますが、可能かどうか、そしてできない場合は理由がわからないまま立ち去るのは嫌です。
更新:問題の原因であった関連問題:
A。 ObjectOutputStreamで書き込まれたファイルを再度開いて追加することはできません。2番目のヘッダーが書き込まれ、ファイルが破損します。
B。 ByteOutputStreamを使用してHashMapをシリアル化してハッシュダイジェストを実行することはできません。ObjectOutputStreamファイルからHashMapを読み込むと、ペアの順序が異なるためにByteOutputStreamから異なるbyte []を取得する可能性が高いためです。同じですが、byte [](およびハッシュダイジェスト)はそうではありません。
これは誰かが時間を節約するのに役立つことを願っています。
解決
これは私のために機能します。ソリューションの違いを探してください。
public class Example implements Serializable { public static void main(String[] args) throws IOException, ClassNotFoundException { new Example().run(); } private void run() throws IOException, ClassNotFoundException { Inner inner = new Inner(); inner.x = 5; ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream outputStream = new ObjectOutputStream( out ); outputStream.writeObject( inner ); ByteArrayInputStream in = new ByteArrayInputStream( out.toByteArray() ); ObjectInputStream inputStream = new ObjectInputStream( in ); Inner inner2 = (Inner) inputStream.readObject(); System.out.println( inner2.x ); } class Inner implements Serializable { int x; } }
他のヒント
少量のサンプルコードを含めることができますか?最も明白な説明は、読み返す前に出力ストリームを閉じたりフラッシュしたりしないということです。
所属していません StackOverflow