Announcement

Collapse
No announcement yet.

Objekte in Datei speichern und wieder laden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Objekte in Datei speichern und wieder laden

    Hi,

    mal wieder eine kleine Frage, ich möchte folgendes tun:

    Einfache Datenobjekte (nur Primitive-Fields) sollen sequentiell in eine Datei gespeichert und wieder daraus gelesen werden.

    Ich habe das folgendermassen versucht zu erledigen:

    FileOutputStream mittels Dateiname anlegen

    ObjectOutputStream mittels FileOutputStream anlegen

    ObjectOutputStream.writeObject(object) für das zu schreibende Objekt aufrufen

    ObjectOutputStream.flush();

    ObjectOutputStream.close();

    Das ganze passiert mehrfach während des Programmablaufs. Der Streamm wird jedesmal neu angelegt und nach Speichern des Objekts geschlossen.

    Als ich nun auf dem umgekehrten Wege die Objekte wieder einlesen wollte, stellte ich fest, dass jeweils nur das letzte gespeicherte Objekt in der Datei zu finden war.

    Weiss jemand warum dem so ist ????

    Vielen Dank für dringend benötigte Hilfe im Voraus

    Jürgen

  • #2
    Wenn der Stream jedesmal neu angelegt und nach Speichern des<br>
    Objekts geschlossen wird, wundert es mich nicht, dass nur der LETZTE<br>
    Eintrag im File steht. Warum bleibt der Stream nicht offen, bis<br>
    ALLE Objekte geschrieben sind?
    <p>
    Klau

    Comment


    • #3
      Hi klaus,
      ich will ehrlich sein: Ich gehöre zu der altmodischen Sorte Entwickler, die noch zu Zeiten programmiert haben, als man noch um jedes Byte und jeden Taktzyklus kämpfte ;-)
      Und ich mag es eigentlich, wenn Resourcen nur dann belegt werden, wenn diese genutzt werden. Da es in meinem Programm relativ selten zu Zugriffen af die genannte Datei kommt, finde ich es eigentlich unscön, wenn die ganze Zeit ein Stream zu dieser Datei offen bleibt.
      Hast Du übrigens eine Ahnung, was so ein Stream an Resourcen belegt ? Würde mich brennend interessieren.
      Eine andere Frage: Warum ist es so selbstverständlich, dass, wenn ich den Stream zwischendurch schliesse, nur der letzte eintrag drin steht. Ich dachte ein Stream wäre lediglich eine Zugangsschnittstelle (in diesem Falle) zur Datei, und dann müsste Anfügen an bestehende Daten doch möglich sein, oder.
      Wenn nicht: Gibt es eine andere Möglichkeit bequem Objekte in Dateien abzuspeichern ?

      Viel Text

      Jürge

      Comment


      • #4
        Hi Jürgen,<br>
        wenn Du den Stream schliesst, schlägt das auf die Datei durch und der nächste writeObject()<br>
        schreibt wieder an den ANFANG der Datei. Das ist wie reopen mit rewind. Zumindest<br>
        bei sequentiellen Dateien. Nur mit RandomAccessFile kannst Du mit seek() ans Ende<br>
        positionieren und dann quasi im append mode fortschreiben. Aber das kenne ich<br>
        nicht im Zusammenhang mit Serialization. Ich würde mir über die Ressourcen bei<br>
        lediglich EINEM geöffneten File keine so grossen Sorgen machen, obwohl ich das<br>
        nicht quantifizieren kann. Du kannst alternativ Deine Objekte in einen Vector schreiben<br>
        und dann am Ende den Vector auf einen Schlag serialisieren. Das ist dann wie append.
        <p>
        Klau

        Comment

        Working...
        X