2016-06-11 14 views
-1

Angenommen, ich habe eine Zeichenfolge, ein Byte [] und eine ArrayList mit einer benutzerdefinierten Klasse, nennen wir es MyClass . Ich muss alle 3 davon in der gleichen Datei speichern, möglicherweise mehrere Male, und ich dachte daran, indem ich alles in ein Byte-Array umwandelte und es speicherte. Die Zeichenkette ist ziemlich direkt: konvertiere in Byte [] und schreibe in Datei, dasselbe mit dem Byte-Array und ich kann die ArrayList auch in ein Byte [] oder eine Menge Byte [] konvertieren und sie in die Datei schreiben.Was ist eine zuverlässige Möglichkeit zum Lesen und Schreiben binärer Chunks variabler Größe in Datei (möglicherweise größer als ein Byte [])

Mein Problem manifestiert sich, wenn ich versuche, Dinge zu schreiben/zu lesen, die länger sind als das, was in ein einzelnes Byte passt [] und ich habe dafür keine gute Lösung gefunden. Nehmen wir zum Beispiel an, die Zeichenfolge ist sehr sehr SEHR lang und enthält utf-8-codierte Zeichen, oder die ArrayList enthält zu viele Elemente, um in ein Byte [] zu passen, dann habe ich keine gute Methode, sie in eine Datei zu schreiben oder zu lesen aus einer Datei.

In Java, so wie ich es verstehe, gibt es keinen Array-Typ, der einen Index vom Typ long akzeptiert. Meine Datei muss in der Lage sein, Dateigrößen von mindestens ein paar GB (etwa 5 bis 25 GB?) Zu überschreiten, so dass das Lesen der gesamten Datei nur für Dateien mit einer Größe unter 4 GB funktioniert (glaube ich).

Hier ist, was ich bin gekommen, sich mit:

ersten ich die Art der Daten speichere ich in der nächsten bin Speicherung x Bytes. Dafür habe ich eine Bitmaske und alle Arten von Daten, die ich speichern möchte (String, welche Art von String, verschiedene Inhalte von MyClass usw.) können mit 1 Byte dargestellt werden. Als nächstes speichere ich die Länge der Daten in Bytes (das x) und dann die Daten selbst. Im Moment habe ich das nur geschafft, weil x vom Typ int ist, und ich brauche es auch lange. Und schließlich möchte ich in der Lage sein, eine Prüfsumme (md5?) Der gespeicherten Daten zu erstellen und die Prüfsumme der Datei voranzustellen, um zu sehen, ob sie seit der letzten Bearbeitung beschädigt wurde.

Ich brauche Ratschläge, wie dies beim Lesen und Schreiben (es muss nicht unbedingt schnell oder effizient sein) oder ein Stoß in die richtige Richtung.

Antwort