2016-04-28 14 views
1

Angenommen, ich habe eine große Datei mit vielen bereits serialisierten Objekten (dies ist der einfache Teil). Ich muss in der Lage sein, zufälligen Zugriff auf die Objekte in der Datei zu haben, wenn ich zur Deserialisierung gehe. Die einzige Möglichkeit, dies zu tun, wäre, den Dateizeiger irgendwie auf jedem Objekt zu speichern.Deserialisieren von Objekten in Java

Grundsätzlich werde ich mit einer großen Datei von serialisierten Objekten enden und will nicht die gesamte Datei deserialisieren, wenn ich nur ein Objekt abzurufen.

Kann mir jemand auf diese eine Richtung zeigen?

+0

Wie wäre es mit einer Art Objekt-DB? Etwas wie [Neodatis] (http://neodatis.wikidot.com/) (es gibt viele andere, siehe [Wikipedia-Seite] (https://en.wikipedia.org/wiki/Comparison_of_object_database_management_systems)) –

+0

Was passiert, wenn Sie serialisieren das Objekt in eine Verzeichnisstruktur mit einer Lookup-Datei auf der obersten Ebene des Verzeichnisses. Jedes Mal, wenn Sie ein Objekt benötigen, parsen Sie die Nachschlagedatei und dann die Datei, die Sie für das jeweilige Objekt benötigen. Nur ein Gedanke. –

+0

Ich versuche, eine Ausnahmeliste in der Datei zu speichern ... also muss ich Skip-Knoten serialisieren und deserialisieren. Gibt es eine Möglichkeit, dass ich mit der Skippliste auf die Knoten zugreifen kann, die ich brauche? Ich glaube, ich würde immer noch einen Dateizeiger benötigen, um das richtige Objekt zu erhalten. –

Antwort

1

Sie können nicht. Serialisierung wird Serialisierung aus einem Grund genannt. Es ist seriell. Zufälliger Zugriff in einen Stream von Objekten funktioniert nicht, aus verschiedenen Gründen einschließlich der Stream-Header, Objekthandles, ...

+0

Warum sollte ein Dateizeiger nicht dort abgelegt werden, wo das Objekt anfängt zu arbeiten? Ich denke, das ist es, was wir tun sollten ... benutze einen Handle, um die Startposition und die Länge zu speichern und dann zu deserialisieren. Würde das funktionieren? –

+0

@LoganM Da zuvor serialisierte Objekte nicht erneut serialisiert werden. Wenn ein Objekt ein Element enthält, das bereits im Stream serialisiert wurde, wird es nicht erneut serialisiert. Die korrekte Deserialisierung dieses Objekts hängt daher davon ab, den gesamten Stream an diesem Punkt zu lesen. – EJP

0

Gerade Serialisierung wird nie die Lösung sein, die Sie möchten. Der serial Teil des Namens bedeutet, dass die Objekte linear auf geschrieben werden.

Das Serialisierungsformat ist bekannt, Hier ist ein link zum Java 6 Serialisierungsformat.

Sie haben mehrere Möglichkeiten:

  1. unserialize die gesamte Datei und gehen von dort aus.
  2. Schreiben Sie Code, um die serialisierte Datei zu lesen und einen Index zu generieren. Vielleicht speichern Sie den Index sogar in einer Datei für die zukünftige Verwendung.
  3. Die Serialisierung in eine Datei wird abgebrochen und die Objekte werden in einer Datenbank gespeichert.
+0

Ein Index wird nicht funktionieren. Der gesamte Stream muss bis zu dem Punkt gelesen werden, an dem sich das benötigte Objekt befindet. – EJP

Verwandte Themen