Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo, ich habe einen Einkaufszettel fertig programmiert und muss in meinen Anforderungen jetzt noch Persistenz und Serialisierung einbauen. Ich habe aber leider keine Ahnung wie das funktionieren soll.
Kann mir jemand helfen?
Ich gehe mal davon aus dass es keine Vorgaben gibt wie diese Serialisierung aussehen muss. Im einfachsten Fall schreibst du einfach Zeile um Zeile in eine Datei. Also so das dein Einkaufszettel dann quasi so aussieht:
Code:
Apfel
Muesli
Milch
Schinkenspeck
Gin
Wenn du eine Anzahl brauchst, kannst du diese davor oder danach schreiben:
Code:
1 Apfel
1 Muesli
2 Milch
1 Schinkenspeck
7 Gin
Code:
Apfel 1
Muesli 1
Milch 2
Schinkenspeck 1
Gin 7
Das schreibst du relativ einfach Zeilenweise in die Datei. Lesen ist genau andersherum, du liest eine Zeile, zerlegst sie entsprechend und erstellst dann ein neues Objekt mit den Wertden beziehungsweise fuegst die Werte dann in dein bestehendes Einkaufszettel-Objekt ein. haengt aber auch davon ab wie deine Objekt-Struktur im Moment aussieht.
Es gibt auch viele fertig Bibliotheken welche es dir erlauben Objekte direkt zu persistieren, die Standard Java Serialization, Kryo, Jackson unter anderem. Aber wenn du es lernen willst, wuerde ich vorschlagen du faengst mal mit einer eifnachen Text-Datei in der Zeilenweise deine Objekte liegen.
Idealerweise hast du dafuer eine Klasse welche dir Objekte serialisieren kann:
Java:
public class Serializer {
public String serialize(Einkaufszettel einkaufszettel) {
// TODO
}
}
Dann kannst du das einfach aufrufen und hast dann einen String welchen du in eine Datei schreiben kannst (wenn du `String`s bauen willst, schlage ich vor kurz meine Wiederholung zum Thema String zu lesen). Der Zwischenschritt ueber den String hat den Vorteil dass du sehr einfach die Ausgabe ansehen, ausgeben und diese mit einem Test verifizieren kannst. Wenn du direkt in eine Datei schreibst, musst du immer mit der handieren.
Das serialisieren selbst ist ein stumpfes schreiben:
Java:
StringBuilder serializedEinkaufszettel = new StringBuilder();
for (String eintrag : einkaufszettel.getEintraege()) {
serializedEinkaufszettel.append(eintrag.getText()).append("\n");
}
Deserialisieren kannst du dann analog dazu implementieren, allerdings musst du dann eben den String welchen du hast in Zeilen zerlegen (split) und dann eventuell diese Zeilen noch in einzelne Felder zerlegen.
Generell ist die Frage, was Du bisher so kennen gelernt hast und was die genauen Anforderungen sind (Denn in der Regel sollen ja Dinge verwendet werden, die man kennen gelernt hat oder es wird erwartet, dass "übliche" Lösungen verwendet werden).
@Robert Zenz hat bereits eine einfache Variante beschrieben. Diese kann man nutzen, um Dinge zu serialisieren.
Aber statt sowas von Hand zu machen, könnte man auch Klassen nutzen, die es bereits gibt. Was es z.B. direkt gibt sind die Klassen ObjectOutputStream / ObjectInputStream, die in der Lage sind, beliebige Instanzen zu (de-)serialisieren.
Ansonsten gibt es aber auch viele Libraries, die sowas bieten. So sind die XML und JSON Formate relativ geläufig und dazu gibt es dann Libraries wie Jackson oder Gson, die man nutzen könnte.
Danke für eure schnelle Antwort. Genau die Anforderung sagt, ich soll mit den Input/Output Klassen arbeiten und ich stehe gerade so auf dem Schlauch wie ich das in meinen Einkaufszettel einbinden soll.
Aber ich versuche mich mal weiter und ihr habt mir schon mal gute Denkanstöße gegeben!
Mit welchen Klassen genau? Meinst Du damit die von mir erwähnten ObjectInputStream / ObjectOutputStream? Oder die Klassen auf java.io oder java.nio? Oder habt Ihr eigene Klassen "Input" und "Output", die ihr verwenden sollt?
Nur um das zu verdeutlichen: Ein Filewriter wäre ja z.B. schon eine Outputklasse, ein FileReader eine Inputklasse.
Die Beschreibung ist sehr vage, so lange da nichts spezifischeres steht, kannst du schon mit dem bisher beschriebenen das Programm umsetzen.
Hallo, ich habe einen Einkaufszettel fertig programmiert und muss in meinen Anforderungen jetzt noch Persistenz und Serialisierung einbauen. Ich habe aber leider keine Ahnung wie das funktionieren soll.
Kann mir jemand helfen?
Um Persistenz und Serialisierung in deinen Einkaufszettel einzubauen, könntest du beispielsweise folgende Schritte durchführen:
Wähle ein geeignetes Datenformat zur Speicherung deiner Einkaufsliste, wie z.B. eine einfache Textdatei oder ein strukturiertes Format wie JSON oder XML.
Wenn du dich für ein Format entschieden hast, musst du die Daten deiner Einkaufsliste in dieses Format umwandeln. Bei der Serialisierung kannst du in den meisten Programmiersprachen auf eingebaute Funktionen oder Bibliotheken zurückgreifen, die dir dabei helfen. Diese Funktionen nehmen deine Datenstruktur und wandeln sie in eine speicherbare Form um.
Speichere die serialisierten Daten in einer Datei auf deinem Speichermedium. Hier kannst du die Datei an einem geeigneten Ort ablegen, wie zum Beispiel im Benutzerverzeichnis oder in einem speziellen Ordner für deine Anwendung.
Beim Start deines Programms kannst du die gespeicherten Daten aus der Datei lesen und sie wieder in die entsprechende Datenstruktur deines Einkaufszettels umwandeln. Das nennt man Deserialisierung. Dadurch kannst du den vorherigen Zustand deiner Einkaufsliste wiederherstellen.
Vergiss nicht, die Daten bei Bedarf regelmäßig zu aktualisieren, wenn Änderungen an deiner Einkaufsliste vorgenommen werden.