speichern eines Arrays in einer Datei in java
Ich speichern möchten, die ein array von zahlen in eine Datei und Lesen Sie es, wenn nötig. Was wäre ein guter Weg, dies zu tun? Ich denke, der kann nur wenige Möglichkeiten, wie das speichern jedes element in einer Zeile als text-Datei oder zu serialisieren und zu speichern /aufrufen von dieser Methode. Speed ist meine erste Sorge.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die Datei nicht lesbar dann serialisieren wäre es der bessere Ansatz performance-wise.
Wenn Sie sparen würden jeden array-Eintrag als eine Zeile in einer Datei, benötigen Sie zum Durchlaufen des Arrays,
einige IO, speichern Sie die Datei später wiederherstellen, wie genau die gleiche array, das Sie tun müssen, würde all diese Schritte in umgekehrter.
Außerdem, IO-Operationen sind ziemlich teuer.
Den eingebauten Mechanismus der Serialisierung bedeutet all dies für Sie-und wohl in der effektivste Weg möglich.
Datei Gespeichert.
Geschwindigkeit ist in diesem Zusammenhang eine sekundäre Frage. Warum? Denn beim Lesen einer Datei sowieso und I/O ist langsam (im Vergleich zu in-memory-Operationen). Ich würde einfach speichern Sie eine Nummer pro Zeile, also es ist lesbar sind.
Wenn die Geschwindigkeit ist Ihr Hauptanliegen, verwenden Sie DataOutputStream und DataInputStream serialisieren Sie es in binäre form.
so etwas wie:
wenn sogar dieses nicht schnell genug ist, erwägen Sie die Verwendung IntBuffer für bulk-Operationen.
Die Vorteile binärer form sind:
Wenn Sie immer nur speichern möchten, die ein array von zahlen ist, dann schreiben Sie Ihre eigenen manuelle Serialisierung/Deserialisierung-routine funktionieren würde. Es wird Ihnen beibringen, etwas über IO-Operationen.
Wenn du mehr komplexe Typen - strings, obwohl die dann mithilfe von integrierten in-Serialisierung-Methoden wird wahrscheinlich dienen Sie auf lange Sicht besser als Sie sind in der Regel zuverlässiger für die überwiegende Mehrheit der Anwendungsfälle.
Zwar bin ich nicht ein Java-dev, es sieht ziemlich einfach zu verwenden Serialisierung in Java. Sonne scheint eine gute Einführung in die Java-Serialisierung.
http://java.sun.com/developer/technicalArticles/Programming/serialization/
Gibt es nicht genug Informationen über Ihren Fall zu wissen, dass der beste Ansatz Geschwindigkeit klug. (wird das multi-Threading, wie oft wird das getan werden, was ist die Größe des Arrays und Themen wie, die).
Dass gesagt wird, die einzige wirkliche Möglichkeit zu wissen, ist Profil. Serialisierung ist trivial, und schreiben eine Zahl pro Zeile ist ziemlich trivial, so können Sie versuchen, die zwei, Sie Profil in der Art von Szenario, die Sie benötigen, zu sehen, welche ist schneller und sehen, wenn Sie schlagen Sie Ihre performance target.
Einen neuartigen Ansatz: Wenn dein array von zahlen eindeutig sind Ganzzahlen, die Sie schreiben, könnte Sie als eine run-length encoded "bit-Satz". Dies würde eine sehr kompakte Darstellung, was bedeutet, weniger I/O. ich würde vorschlagen, diesen Ansatz für die Speicherung von sehr großen arrays von eindeutigen zahlen.
Angenommen, dein array enthält die Werte
[1 ,2 ,3 ,5 ,9]
, Ihre bit-set würde wie folgt Aussehen:... und Ihre RLE-codiert bit-Satz wäre:
... das ist intepreted als "0 Nullen, 1, 3 Nullen, 1, usw.".
Können Sie wählen, um entweder bestehen die RLE-kodierten string als Zeichen oder mit einem binären format.
Dies ist vielleicht ein overkill, aber möchten Sie vielleicht zu berücksichtigen, wie JSON ordentlich verarbeitet seine key:value, array-basierte Daten.
Sie können speichern Sie Ihre arrays wie folgt in einer einzigen Datei
{
"myArrays":{
"1" : "[0 1 2 3 4 5]"
"2" : "[0 1 2 3 4 5]"
Abrufen arrays, Lesen Sie den Inhalt der Datei und speichern Sie Sie in StringBuffer, Serialize (z.B. net.sf.json.JSONSerializer) in ein JSON-Objekt und Durchlaufen werden, jeder Satz von arrays bequem.
Folgende Serialisierung ist der beste Weg. Aber wenn es Ihr Anliegen ist die Geschwindigkeit der Serialisierung ist nicht die richtige option. (Serialisierung Leistung ist schlecht).