Frage

Im Grunde habe ich eine Datei mit String-Objekten.Ich habe Java verwendet ObjectOutputStream um die Objekte aufzubewahren.Ist es möglich, zufällig auf die Objekte (Strings) zuzugreifen, wenn ich beispielsweise auf das 11. Objekt zugreifen möchte, könnte ich einfach irgendwie zu diesem Ort springen, ohne es verwenden zu müssen readObject() 11. Mal, um zu diesem Ort zu schleifen.Und wenn ich zurückspringen möchte, könnte ich das auch tun, ohne noch einmal von vorne beginnen zu müssen.Danke.

Wie vorgeschlagen, denke ich, dass ich irgendwie die Methode „skipBytes()“ verwenden kann, um eine Art Direktzugriff zu realisieren.Ich kann zwar nicht garantieren, dass mein Objekt eine feste Größe hat, aber was wäre, wenn ich ein Array mit Positionen dieser Objekte in der Datei behalten könnte? Ich könnte dieses Array einfach als Index und mit „skipBytes()“ für den Direktzugriff verwenden.Bleibt also weiterhin das Problem, dass ich die Größe von Objekten kennen könnte, wenn ich sie tatsächlich schreibe, sodass ich die Position irgendwie aufzeichnen könnte?

War es hilfreich?

Lösung

Der ObjectOutputStream selbst kann das nicht, weil es erstens die Größe der Objekte in dieser Datei nicht kennen kann;Tatsächlich kann es nicht einmal wissen, dass die Objekte vom gleichen Typ sind.

Wenn Du Stellen Sie sicher, dass die Objekte eine feste Größe haben und dass Sie die Größe kennen, die Sie nutzen können skipBytes() Methode - aber ich bezweifle stark, dass Sie das wirklich wissen.


BEARBEITEN:Vielen Dank, dass Sie meine Antwort akzeptiert haben, aber (machen Sie es einfach klar):Meine Absicht war es, dies auf eine Art und Weise zu zeigen könnte gemacht werden Angesichts der von Ihnen genannten Anforderungen ist dies jedoch überhaupt nicht der Fall Sollte gemacht werden, Meiner Meinung nach.:) :)

Andere Tipps

Die einzige Möglichkeit, dass Sie dies tun können, besteht darin, die Objekte in ihren eigenen Streams separat zu speichern, entweder in derselben Datei oder in verschiedenen Dateien.

Es ist wahrscheinlich, dass das einfachste zu tun ist, Ihre Objekte in einer Liste zu speichern, und diese Liste in einem Lesen lesen und zufällig auf die Liste zugreifen.

Dies ist mit ObjectInputStream nicht möglich, wenn Sie einen zufälligen Zugriff benötigen, müssen Sie alle Objekte in einer Sammlung / Array lesen, die zuerst den zufälligen Zugriff unterstützt.

Benutzen ObjectOutputStream Das Speichern von String-Objekten ist völliger Overkill.Sie haben bereits darüber nachgedacht, einen Index der Startpositionen zu verwenden.Warum speichern Sie die Zeichenfolgen dann nicht einfach mit a direkt in der Datei? FileOutputStream - entweder einwickeln OutputStringWriter Verwenden einer Kodierung fester Länge (wobei die Anzahl der Bytes == Länge der Zeichenfolge, möglicherweise *2) oder verwenden toBytes(encoding) auf jede Zeichenfolge einzeln und notieren Sie die Länge der resultierenden Byte-Arrays.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top