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

Bolehkah Anda Menambah pada ObjectOutputStreams Sedia Ada di Java?

Patricia Arquette
Lepaskan: 2024-12-16 20:19:17
asal
145 orang telah melayarinya

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();
Salin selepas log masuk

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() );
}
Salin selepas log masuk

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

}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan