Heim >Java >javaLernprogramm >Wie kann ich an eine vorhandene ObjectOutputStream-Datei anhängen, ohne Daten zu überschreiben?

Wie kann ich an eine vorhandene ObjectOutputStream-Datei anhängen, ohne Daten zu überschreiben?

Barbara Streisand
Barbara StreisandOriginal
2024-12-12 16:49:09387Durchsuche

How Can I Append to an Existing ObjectOutputStream File Without Overwriting Data?

ObjectOutputStream-Anhang: Eine Lösung mit Unterklassen

Das Anhängen an einen ObjectOutputStream kann eine problematische Aufgabe sein. Wie Sie festgestellt haben, besteht das Standardverhalten von ObjectOutputStream beim Schreiben in eine vorhandene Datei darin, diese zu überschreiben, was zu Datenverlust führt.

Um dieses Problem zu beheben, besteht der Schlüssel darin, das Verhalten von ObjectOutputStream zu überschreiben. Insbesondere können wir durch Überschreiben der Methode writeStreamHeader verhindern, dass der Header beim Anhängen an eine vorhandene Datei geschrieben wird. Betrachten Sie das folgende Codebeispiel:

public class AppendingObjectOutputStream extends ObjectOutputStream {

  public AppendingObjectOutputStream(OutputStream out) throws IOException {
    super(out);
  }

  @Override
  protected void writeStreamHeader() throws IOException {
    // Do not write a header
    reset(); // Added to fix potential issues with previous implementation
  }
}

Die Unterklasse AppendingObjectOutputStream erbt von der ursprünglichen ObjectOutputStream-Klasse und überschreibt die Methode writeStreamHeader. Innerhalb dieser überschriebenen Methode schreiben wir keinen Header, sondern setzen den Stream zurück. Dies ermöglicht es uns effektiv, Daten an eine vorhandene Datei anzuhängen, ohne sie zu überschreiben.

Um diese Technik zu verwenden, können Sie überprüfen, ob die Verlaufsdatei vorhanden ist oder nicht. Wenn die Datei vorhanden ist, instanziieren Sie den AppendingObjectOutputStream. andernfalls verwenden Sie den regulären ObjectOutputStream. Hier ist eine aktualisierte Version Ihres Codes, die diesen Ansatz verwendet:

OutputStream out;
if (historyFile.exists()) {
  out = new AppendingObjectOutputStream(new FileOutputStream(historyFile, true));
} else {
  out = new ObjectOutputStream(new FileOutputStream(historyFile));
}
out.writeObject(new Stuff(stuff));
out.close();

Durch die Verwendung der AppendingObjectOutputStream-Klasse beim Anhängen an eine vorhandene Datei können Sie die vorhandenen Daten beibehalten, während Sie neue Objekte hinzufügen. Mit dieser Technik können Sie einen dauerhaften Datenspeicher erstellen, der bei Bedarf wachsen kann, ohne dass ein Überschreiben oder Datenverlust erforderlich ist.

Das obige ist der detaillierte Inhalt vonWie kann ich an eine vorhandene ObjectOutputStream-Datei anhängen, ohne Daten zu überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn