Rumah >Java >javaTutorial >Bolehkah Anda Menambah pada ObjectOutputStreams Sedia Ada di Java?

Bolehkah Anda Menambah pada ObjectOutputStreams Sedia Ada di Java?

Patricia Arquette
Patricia Arquetteasal
2024-12-16 20:19:17147semak imbas

Can You Append to Existing ObjectOutputStreams in Java?

Melampirkan pada Strim Objek Sedia Ada

Timbul persoalan sama ada ia boleh ditambahkan pada ObjectOutputStream. Percubaan untuk menambahkan senarai objek sekali-sekala gagal semasa membaca, mengakibatkan java.io.StreamCorruptedException.

Penggunaan biasa melibatkan:

FileOutputStream fos = new FileOutputStream
           (preferences.getAppDataLocation() + "history" , true);
ObjectOutputStream out = new ObjectOutputStream(fos);

out.writeObject( new Stuff(stuff) );
out.close();

Seterusnya, semasa membaca:

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() );
}

Mensubkelaskan ObjectOutputStream dan mengatasi kaedah writeStreamHeader menyediakan penyelesaian:

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();
  }

}

Segera strim boleh tambah jika fail sejarah wujud (tambah tanpa pengepala) atau strim asal jika ia tidak wujud (buat dengan pengepala).

Atas ialah kandungan terperinci Bolehkah Anda Menambah pada ObjectOutputStreams Sedia Ada di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn