Anhängen an einen ObjectOutputStream: Eine Lösung
In Java wird das Anhängen an einen ObjectOutputStream nicht grundsätzlich unterstützt. Der Versuch, mit dem Standard-ObjectOutputStream an eine vorhandene Datei anzuhängen, führt beim Lesen zur StreamCorruptedException.
Um diese Einschränkung zu überwinden, kann man eine Unterklasse von ObjectOutputStream erstellen und deren writeStreamHeader-Methode überschreiben. Der geänderte writeStreamHeader sollte keinen Header schreiben, sondern stattdessen den Stream zurücksetzen, wenn das ursprüngliche Objekt geschrieben wird.
Der folgende Code demonstriert die Erstellung einer AppendingObjectOutputStream-Klasse:
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.reset(); } }
Um diese Klasse zu verwenden, Stellen Sie fest, ob die Zielverlaufsdatei vorhanden ist. Wenn dies der Fall ist, instanziieren Sie den AppendingObjectOutputStream, um Daten anzuhängen, ohne einen Header zu schreiben. Wenn die Datei nicht vorhanden ist, instanziieren Sie den Standard-ObjectOutputStream, um einen Header zu schreiben.
// Check if history file exists if (fileExists) { // Appendable stream ObjectOutputStream out = new AppendingObjectOutputStream(new FileOutputStream(filePath, true)); } else { // Standard stream ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filePath)); }
Mithilfe des AppendingObjectOutputStream können Objekte erfolgreich an eine vorhandene Verlaufsdatei angehängt werden, um sicherzustellen, dass alle geschriebenen Objekte gelesen werden können in der richtigen Reihenfolge.
Das obige ist der detaillierte Inhalt vonWie kann ich Objekte an einen vorhandenen ObjectOutputStream in Java anhängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!