Savegame als Datei, welche API-Klasse benutzen

raizer

Mitglied
Hallo,

ich bin dabei ein RPG in Java zu programmieren, habe soweit auch alles hinbekommen, nun bin ich aber beim Speichern angekommen. Ich habe auch eine ungefähre Vorstellung davon wie ich das machen könnte, es hapert aber an der Umsetzung.
Ich habe mir überlegt alle relevanten Werte in eine Datei zu schreiben und diese dann beim Laden wieder auszulesen und dann neue Objekte mit den in der Datei gespeicherten Werten zu erstellen.
In jeder Klasse, die ich im Laufe des Spiels erstelle, exsistieren Methoden die mir Werte wiedergeben können und auch Methoden die eben diese bearbeiten können.
Jetzt habe ich nur noch das Problem, dass ich nicht weiß wie ich das Ganze in einer Datei so speichere, dass sich am Besten mit der Datei arbeiten kann. In C habe ich ähnliches schon gemacht, ich habe dort mit „ofstream“ eine Binär-Datei erstellt und dort die Werte eingeschrieben habe. In Java ist das Ganze aber für mich ein wenig undurchsichtig. Ich habe in der Bibliothek bereits geschaut und ich habe mehrere Möglichkeiten um eine Datei zu erstellen. Ich weiß nicht ob ich direkt mit Input- und OutputStream arbeiten soll oder mit einer der Instanzen.
Es wäre nett, wenn Ihr mir verraten könntet wann man welche Klasse am Besten benutzt und warum man diese gerade nimmt.
Ich hoffe das ich den richtigen Themenbereich gefunden habe und das man mein Problem wenigstens ungefähr überblickt – danke im Vorraus.

MfG Christian
 

babuschka

Top Contributor
Hallo,

Du könntest Deine zu speichernden Klassen das Interface Serializable implementieren lassen.
Dadurch kannst Du Deine Objekte bequem speichern und wieder laden - z.B. mit dem java.beans.XMLEncoder/XMLDecoder als XML-Datei oder per ObjectOutputStream.
 

AlexSpritze

Bekanntes Mitglied
Hallo,

Du könntest Deine zu speichernden Klassen das Interface Serializable implementieren lassen.
Dadurch kannst Du Deine Objekte bequem speichern und wieder laden - z.B. mit dem java.beans.XMLEncoder/XMLDecoder als XML-Datei oder per ObjectOutputStream.

Also entweder in einer Klasse das Interface Serializable implementieren und diese Klasse dann per ObjectOut/InputStream speichern/laden, oder über XMLDe/Encoder die Klasse in eine XML-Datei speichern/laden. Im letzteren Fall muss die Klasse aber dem Bean-Pattern gehorchen... dafür brauch sie dann kein Serializable Interface.

Nachteil der XML*Coder: Die Daten des Savegames liegen offen in der XML-Datei.

Wenn du etwas ähnlich binäres wie in C suchst, ist wohl mit dem Serializable Interface geholfen: Java ist auch eine Insel – 12.14 Persistente Objekte und Serialisierung

Also eine Klasse
Code:
SaveGame
machen und in der die Daten halten.
Java:
public class SaveGame implements Serializable { ... }
 

babuschka

Top Contributor
Es besteht natürlich immer noch die Möglichkeit, das Ganze zusätzlich zu verschlüsseln.

Hier ein Beispiel, wie man in java Verschlüsselungen nutzen kann: Link
 

raizer

Mitglied
Erstmal danke für die schnellen Antworten.

Ich denke, dass ich die Lösung mit dem Interface Serializable machen werde, da ich das ganze nicht noch komplizierter machen wollte als es muss - also ohne extra Verschlüsselung und co. Mir gefällt die Lösung gut, da die Daten nicht offen liegen, aber dennoch lecht zu handhaben sind.

Aber warum muss ich das Interface implementieren, kann ich nicht einfach gleich mit Input-/OutputStream arbeiten? Das ist nur eine reine Verständnissfrage, da wir in Programmieren noch nicht mit Dateien gearbeitet haben, zumindest nicht in Java.
 

AlexSpritze

Bekanntes Mitglied
Aber warum muss ich das Interface implementieren, kann ich nicht einfach gleich mit Input-/OutputStream arbeiten? Das ist nur eine reine Verständnissfrage, da wir in Programmieren noch nicht mit Dateien gearbeitet haben, zumindest nicht in Java.

Dieses Interface Serializable ist ein sog. Marker-Interface. Es definiert keine Methoden, sondern dient lediglich dazu anzuzeigen, diese Klasse kann serialisiert werden. Deshalb implementieren Klassen, wie String, dieses Interface auch.

Wenn du versuchst eine Klasse zu serialisieren, die das Interface nicht implementiert hat, dann wird eine Exception (NotSerializableException) geworfen.
 

Kr0e

Gesperrter Benutzer
Die Strings liegen schon offen rum, aber verändern kann man die direkt nicht, denn im Stream ist auf binäre Weise jeweils die Länge des folgenden Strings angegeben. Wenn der String geändert wird (länger/kürzer) dann gibt es beim Dekodieren sowieso eine StreamCorruptedException.

Aber ich würde dir noch eine zusätzliche Sache empfehlen:

Schachtel den ObjectInput/OutputStream mit einem Deflater/Inflater/Input/OutputStream. Das ist ein Kompressionsstream. Dadurch hast 2 weitere Vorteile:

Der Inhalt ist ab wann WIRKLICH nicht mehr lesbar und besteht nur noch aus merkwürdigen Zeichen und deine Datei ist kleiner, was bei ObjectInput/OutputStream ratsam ist, da der dort verwendete Algorithmus leider sehr langsam und sehr ineffizient Daten speichert. Für eine Map ist das vollkommen egal, aber verwende diese Streams nicht, um Daten übers Netzwerk auszutauschen ;)

Gruß,

Chris
 

raizer

Mitglied
Ok, dann sage ich vielen Dank und ich werde Euch auf dem Laufenden halten ob es funktioniert hat oder ob ich noch Probleme habe.

MfG Christian
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M "Java Datei" Cannot be resolved to a variable Spiele- und Multimedia-Programmierung 2
H Musik Datei lädt nicht? Spiele- und Multimedia-Programmierung 8
K Das Leerzeichen der Tastatur wird nicht gleichgesetzt mit dem Leerzeichen aus der Text Datei Spiele- und Multimedia-Programmierung 5
P .Wav Datei vor main-Methode abspielen? Spiele- und Multimedia-Programmierung 9
F SO-Datei compilieren... Spiele- und Multimedia-Programmierung 1
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
G Audio-Datei analysieren Spiele- und Multimedia-Programmierung 3
J Programm kann Audio Datei nicht finden Spiele- und Multimedia-Programmierung 7
L Wiedergabe von wav-Datei aus jar fehlerhaft Spiele- und Multimedia-Programmierung 2
Polarfuchs Status von Midi Datei(wird gerade abgespielt oder nicht) Spiele- und Multimedia-Programmierung 0
T Minecraft Bukkit Plugin Text Datei auslesen Spiele- und Multimedia-Programmierung 1
E .jar-Datei tut nichts Spiele- und Multimedia-Programmierung 5
C Highscoreliste mit SharedPreferences oder XML-Datei? Spiele- und Multimedia-Programmierung 1
D Probleme mit der Runnable jar Datei Spiele- und Multimedia-Programmierung 3
I Minecraft NBT Minecraft *.dat-Datei - Verständnisproblem Spiele- und Multimedia-Programmierung 26
H wma Datei abspielen: java.io.IOException: Resetting to invalid mark Spiele- und Multimedia-Programmierung 11
L Werte aus einer .yml Datei lesen Spiele- und Multimedia-Programmierung 9
J Audio Input mit Datei abgleichen Spiele- und Multimedia-Programmierung 11
M Internet Java Spiel (.jar Datei) auf dem PC ausführen Spiele- und Multimedia-Programmierung 7
A Audio-Datei auf Mikrofonausgang senden? Spiele- und Multimedia-Programmierung 2
S MP3 Datei informationen bearbeiten Spiele- und Multimedia-Programmierung 9
Guybrush Threepwood Overhead: Ressourcen in Jar-Datei Spiele- und Multimedia-Programmierung 4
P .obj-Datei in Java3D laden: ParsingErrorException Spiele- und Multimedia-Programmierung 7
R JLayer player spielt nur eine mp3 Datei ab Spiele- und Multimedia-Programmierung 1
W Bitmap aus Datei erstellen Spiele- und Multimedia-Programmierung 5
A wav datei aus jar Abspielen Spiele- und Multimedia-Programmierung 7
M Das Frequenzspektrum einer WAV/MP3-Datei anzeigen Spiele- und Multimedia-Programmierung 6
N bei abspielen der wav datei fehler Spiele- und Multimedia-Programmierung 6
S benutzerdefiniertes Tileset in Datei speichern Spiele- und Multimedia-Programmierung 3
J Zeichnen in BufferedImage und dieses in Datei speichern Spiele- und Multimedia-Programmierung 2
R Wave-Datei mit JLayer abspielen Spiele- und Multimedia-Programmierung 4
M Directx Datei laden Spiele- und Multimedia-Programmierung 3
M Probleme mit WaveFront-Object - Datei Spiele- und Multimedia-Programmierung 7
M mehrere PNG in eine Datei Spiele- und Multimedia-Programmierung 3
G Einen gif oder jpg Datei aus einem Graphics Objekt o. JFrame Spiele- und Multimedia-Programmierung 2
T Welche packages aus der java api doku ist hilfreich zur Android Spieleprogrammierung Spiele- und Multimedia-Programmierung 2
D Java Webgame, welche Frameworks oder Techs sind von Nöten? Spiele- und Multimedia-Programmierung 5
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
V welche vorgehensweise beforzieht ihr bei einfachem Quizz Spiel ? Spiele- und Multimedia-Programmierung 4
T Welche OpenGL-Version soll ich verwenden? Spiele- und Multimedia-Programmierung 2
A Welche chunks im vorraus laden? Spiele- und Multimedia-Programmierung 9
J Welche Tutorials, Projekte, Libraries, etc? Spiele- und Multimedia-Programmierung 7
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
morkuzz Grafische Oberfläche für Schachprogramm - Welche? Spiele- und Multimedia-Programmierung 6
F Welche middleware? Spiele- und Multimedia-Programmierung 6
G Welche Game Api Spiele- und Multimedia-Programmierung 9
Y Applet für "Vier Gewinnt": Welche Klassen verwende Spiele- und Multimedia-Programmierung 10
X Welche 3D-Software Spiele- und Multimedia-Programmierung 6
Quaxli Welche Grafiksoftware nutzt Ihr für 2D-Spiele? Spiele- und Multimedia-Programmierung 6
S Welche Klassen für ein 4 Gewinnt? Spiele- und Multimedia-Programmierung 6
M Welche ist die beste Java3D-Engine Spiele- und Multimedia-Programmierung 15

Ähnliche Java Themen

Neue Themen


Oben