既存のオブジェクト ストリームへの追加
ObjectOutputStream に追加できるかどうかという疑問が生じます。オブジェクトのリストを追加しようとすると、読み取り中に断続的に失敗し、java.io.StreamCorruptedException が発生します。
一般的な使用法には次のようなものがあります。
FileOutputStream fos = new FileOutputStream (preferences.getAppDataLocation() + "history" , true); ObjectOutputStream out = new ObjectOutputStream(fos); out.writeObject( new Stuff(stuff) ); out.close();
その後の読み取り中:
FileInputStream fis = new FileInputStream ( preferences.getAppDataLocation() + "history"); ObjectInputStream in = new ObjectInputStream(fis); try{ while(true) history.add((Stuff) in.readObject()); }catch( Exception e ) { System.out.println( e.toString() ); }
ObjectOutputStream をサブクラス化し、writeStreamHeader メソッドをオーバーライドすると、解決策:
public class AppendingObjectOutputStream extends ObjectOutputStream { public AppendingObjectOutputStream(OutputStream out) throws IOException { super(out); } @Override protected void writeStreamHeader() throws IOException { // do not write a header, but reset: // this line added after another question // showed a problem with the original reset(); } }
履歴ファイルが存在する場合は追加可能なストリームをインスタンス化し (ヘッダーなしで追加)、存在しない場合は元のストリームをインスタンス化します (ヘッダー付きで作成)。
以上がJava で既存の ObjectOutputStream に追加できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。