speichern/laden von array von Objekten mit java-Serialisierung
Habe ich die folgende Klasse, die führt einige Berechnungen zu füllen Ihre statische arrays.
public class Amount implements Serializable{
private static final long serialVersionUID = 8141477444408242243L;
public static Amount values1[][] = new Amount[10][30];
public static Amount values2[][] = new Amount[10][30];
public static Amount values3[][] = new Amount[10][30];
double highestValue;
double highestAmount;
double lowestAmount;
double lowestValue;
...
}
Als die Berechnungen nehmen Sie 20 Minuten oder so, ich bin auf der Suche, um zu speichern die arrays auf Datei, und laden Sie die Werte, wenn das Programm gestartet wird. Ich bin versucht, die java-Serialisierung-Methode und haben die folgenden Funktionen
public static void loadFile(Amount[][] arr, String filename){
try {
FileInputStream fis = new FileInputStream(filename);
ObjectInputStream in = new ObjectInputStream(fis);
arr = (Amount[][])in.readObject();
in.close();
}
catch (Exception e) {
System.out.println(e);
}
}
public static void saveFile(Amount[][] arr, String filename){
try {
FileOutputStream fos = new FileOutputStream(filename);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(arr);
out.flush();
out.close();
}
catch (IOException e) {
System.out.println(e);
}
}
die nenne ich, wie dieses saveFile(values1, "valueOneSaveFile");
und loadFile(values1, "valueOneSaveFile");
Habe ich führen Sie das Programm einmal und speichert alle arrays in verschiedene Dateien. Die Dateien erstellt haben und schauen, um die richtige Größe. Wenn ich mein Programm aufrufen, um die loadFile-Funktionen, die arrays offenbar nicht richtig initialisiert werden. Ich bin immer von null-pointer-exceptions beim Versuch zu Lesen einen Wert aus dem array (der scheint leer zu sein, nachdem die Last)
InformationsquelleAutor Wozza | 2011-10-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist in Ihrem LoadFile-Methode.
Java übergibt Parameter per Wert. Im Falle von Objekten, die eine Kopie der "Zeiger" übergeben werden.
Wenn Sie ein update für das array:
Sind Sie nicht aktualisieren Betrag.values1 array, statt die lokale arr variable zeigt auf ein neues array.
Ändern Sie die Signatur der Methode an:
Und verwenden Sie es entsprechend.
Ich bin etwas verwirrt, aber. Also in den originalen code, das erste argument der
loadFile
Funktion übergeben werden, als ein Zeiger. Die Funktion erstellt dann eine Kopie dieses Zeigers, und updates, die Kopie auf einen anderen Bereich im Speicher, wo das Ergebnis von der Datei zu laden (d.h.in.readObject()
) gespeichert ist. Die Zeiger an die Funktion gesendet werden, bleibt unverändert und immer noch Punkte, um ein leeres array. Ist das richtigEs gibt nicht wirklich Pointer in Java. Ich denke, es ist richtiger zu sagen, Verweise. Was Sie oben geschrieben haben, ist korrekt. Das original-array variable wird nie initialisiert und somit bekommst du eine NullPointerException, wenn Sie darauf zugreifen.
InformationsquelleAutor Erel
Könnte es ein Problem mit der
readObject
undwriteObject
Methoden, die Sie implementieren in IhremAmount
Klasse. Ein umfassendes Beispiel finden Sie hier.Sie sollten auch mit XStream zu speichern/laden Sie Ihre Daten. Es ist sehr einfach zu bedienen, wie gezeigt hier.
InformationsquelleAutor npinti