Speichern Spiel Datei
Arbeite ich auf einem primitiven RPG, und diese Klasse (angeblich) alle notwendigen Daten enthält:
public class CPU implements Serializable{
private Map<String, Location> locations;
private Map<String, Location> places;
private Map<String, NPC> npcs;
private Game game;
private Player player;
private NPC currentNPC;
public CPU(){
}
(Ich habe nicht die Methoden, aber ich denke, dass diese unerheblich sind, gerade jetzt...)
Der Klasse "Spiel" enthält auch die Spieler und die CPU, wie Variablen, aber der Konstruktor ist nicht derjenige, um tatsächlich zu erstellen (diese werden erzeugt in der main () - Methode, dann Hinzugefügt, um die Klassen). Diese Methode ist die einzige, der soll zum speichern der CPU-Klasse zu einer Datei, so kann ich alle Daten Lesen aus es später:
public void SaveGame(String s){
String sav = s;
sav.concat(".dat");
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(sav));
oos.writeObject(cpu);
oos.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
- Und dies ist die Methode, um aus der Datei laden:
public void Load(String s){
if(s.contains(".dat")){
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(s));
cpu = (CPU)ois.readObject();
ois.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
Meine Frage ist grundsätzlich: soll das funktionieren? Bin ich in der Lage, einfach serialisieren der CPU-Klasse und speichern Sie es in eine Datei, dann Lesen Sie es wieder und werden in der Lage, um wieder alle Daten von ihm (ich.e der Spieler Daten)?
Wenn ich mich richtig erinnere, in Java "=" bedeutet nicht, dass das Objekt auf der rechten Seite kopiert werden, so mein anderes problem ist: wenn die Methode "Load" abgeschlossen ist, wird die "cpu" (die variable "Spiel"-Klasse) enthält die CPU, die ich aus der Datei geladenen, und ich in der Lage sein, Daten zu Lesen?
Was passiert, wenn du es ausprobiert?
Bezüglich deinem letzten Absatz: Warum sollte die CPU geladen Instanz magisch Weg? In Java, Sie sind im Grunde die Zuordnung von Referenzen und wie lange Sie haben, eine Referenz auf ein Objekt, wird es nicht von der garbage Collection freigegeben.
Habe nicht versucht es noch, weil ich habe daran gearbeitet, seit fast 10 Stunden, und ich bin etwas anderes tun für eine Weile... 😉
InformationsquelleAutor user1856971 | 2012-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tatsächlich, es funktioniert nur, wenn der name der Originaldatei, die Sie an die
SaveGame()
Methode enthält".dat"
.In der Tat, die Lektüre-Methode überprüft, die Bedingung und die
SaveGame()
- Methode (die benannt werden solltensaveGame()
zu respektieren, die Java naming conventions) nicht anfügen .dat auf den Namen der Datei als Sie denken. Ja, Strings sind unveränderlich, und dieconcat()
- Methode gibt eine neue Zeichenkette, aber nicht die Zeichenfolge ändern es heißt. Der code sollteSollten Sie auch nicht länger ignorieren, Ausnahmen, wie Sie tun, und Sie sollten immer in der Nähe der Bäche in einen finally-block. Wenn Sie unter Java 7, verwenden Sie die try-mit-Ressourcen konstruieren.
Ich bin nicht ignorieren, die Ausnahmen, durch die Art und Weise. Ich habe einfach nicht den rest der "catch" - block hier. Aber während wir auf das Thema: würde die load-Methode werfen Sie eine "FileNotFoundException", wenn die Zeichenfolge, die den Dateinamen ist falsch? Ich möchte, dass der Umgang mit solchen Fehlern.
Ja, als pro Dokumentation
InformationsquelleAutor JB Nizet
Wenn Ihr Programm die erforderlichen Berechtigungen hat, Dateien zu schreiben, und alle von dem Gebiet-Klassen (NPC, Spiel, Spieler. Lage) serialisierbar sind, dann es funktioniert.
Den
cpu
Feld der Game-Klasse wird enthalten die CPU geladen werden aus der Datei wenn keine Ausnahme wird ausgelöst, wenn beim Lesen der Objekt -.InformationsquelleAutor FThompson