Sehr sonderbares Verhalten

javamax2000

Neues Mitglied
Servus,

aktuell bin ich dabei eine Bibliohek für das Einspeichern, Auslesen (löschen etc. soweit bin ich noch nicht) von Werkzeugen anzulegen. Der Speichermechanismus funktioniert über eine Serialisierung.
Problem: Das Serialisieren/ Deserialisieren verhält sich sehr komisch:

Ich füge neu anzulegende Objekte mit der Syntax

try (FileOutputStream fos = new FileOutputStream ("tools_cyl.ser", true);
ObjectOutputStream oos = new ObjectOutputStream (fos)) {
oos.writeObject(tools_cyl);
}

ans Ende der aktuellen Serialisierungsdatei hinzu (.ser Datei wird also nicht überschrieben, sollte eigentlich so passen).

Wenn ich nun in einem Programmdurchlauf A ein Werkzeug einspeichere und im nächsten Durchlauf B ein anderes Werkzeug und dann im Durchlauf C nach diesen Werkzeugen suche, finde ich sie auch. Das funktioniert bis zu diesem Punkt alles einwandfrei. Ab dem Punkt, dass ich aber ein drittes Werkzeug in einem separaten Programmdurchlauf hinzufüge, kann man dieses nicht mehr finden.
Es gibt auch die Möglichkeit mehrere Werkzeuge in einem Programmdurchlauf zu speichern, dann kann ich diese auch suchen und finden, unabhängig wie viele Werkzeuge ich speichere.

Ich sitze jetzt ewig dran und versuche eine Lösung zu finden, bin aber völlig ratlos.
Ich verstehe überhaupt nicht, wo das Problem liegt, denn das Beispiel mit Durchlauf A, B, C zeigt ja, dass es (wenn auch nur für die ersten 2 Werkzeuge) prinzipiell möglich ist, Objekte in separaten Durchläufen zu speichern und auch wieder zu finden.

Die Eclipse Archiv Datei findet ihr hier:


(Hauptklasse ist Tool_Lib,
Am Anfang Deklaration der globalen Variablen, inkl. einer ArrayList in die die neuen Werkzeuge eingespeichert werden,
danach Abfrage, was der Benutzer machen will (Werkzeug speichern, finden, löschen etc.)
setTool_Cyl ist eine Funktion zur Erzeugung eines Werkzeugs- das Objekt wird dann in oben genannte ArrayList hinzugefügt
getTool_Cyl ist die Funktion zur Suche nach einem Werkzeug- hier wird eine geklonte ArrayList aus der .ser Datei erzeugt und dann nach Übereinstimmung gesucht

Die main ist das Hauptprogramm, falls ein neues Werkzeug/ neue Werkzeuge gespeichert wird/ werden, wird hier auch die so entstandene ArrayList an die .ser Datei angehängt)

Ich hoffe auf eure Hilfe!!

Grüße,
Max
 

Oneixee5

Top Contributor
Ich denke du solltest dein Programm noch mal überdenken. Deine Kommentare deuten an, dass du das Programm länger verwenden willst. Dafür ist Serialisierung eigentlich ungeeignet. Das Erweitern einer Datei bei Serialisierung habe ich noch nie gesehen. Es wäre möglich das so etwas gar nicht funktioniert. Verwende besser ein Format wie JSON ober falls du oft ändern willst eine Embedded-DB wie H2.
Es ist nicht nötig gefühlte 20 Scanner zu benutzen, einer reicht völlig.
 

KonradN

Super-Moderator
Mitarbeiter
Also ich kann aus Deiner Fehlerbeschreibung nicht wirklich viel ablesen.

Was ich für möglich halte:
a) serialVersionUID fehlt in den Klassen Tool_cyl_mono und Tool_cyl_wsp. Damit kann es sein, dass Du Instanzen der Klasse nach einem neu übersetzen nicht einlesen kannst.
b) Das Anhängen erachte ich für problematisch. Der neu erzeugte ObjectOutputStream schreibt ein paar Bytes Initialisierung. Dies dürfte dann ggf. bei der Deserialisierung stören.
 

KonradN

Super-Moderator
Mitarbeiter
Generell würde ich von einer Binary Serialisierung absehen, wenn Du dafür nicht sehr gute Gründe hast. Es scheint nur auf den ersten Blick einfach sein, aber die Komplexität kann sehr schnell steigen. Daher würde ich immer auf andere Formate ausweichen:
- Für den Transport von A nach B sind JSON und XML die bevorzugte Wahl.
- Für eine Datenspeicherung sind Datenbanken oft die bessere Wahl.
 

javamax2000

Neues Mitglied
Schonmal vielen Dank für alle Antworten!

Ich werde mal versuchen alle von euch genannten Tipps umzusetzen und beobachten was dann passiert. Mit der Serialisierung gebe ich euch völlig Recht- der Grund warum ich dennoch serialisiert habe ist, dass ich nicht aus dem Bereich Informatik komme und mir die Grundlagen daher selbst aneignen muss. Serialisierung war in diesem Zusammenhang für mich der verständlichste Speichermechanismus. Falls hier jemand ein paar Worte zum Thema JSON verlieren möchte oder einen Link hat zu einer (verständlichen) Doku/ Übersicht zu diesem Thema, freue ich mich natürlich.

Grüße,
Max
 

KonradN

Super-Moderator
Mitarbeiter
Also wen Du etwas als XML oder JSON speichern willst, dann nimmst Du dazu am Besten einfach eine Library wie z.B. gson oder Jackson.

Der Vorteil ist, dass Du da dann so gut wie keinen Code schreiben musst. Du hast dann einfach eine Klasse, die z.B. Deine Werte alle in einer Liste hält und speicherst diese dann einfach.

Wenn man in Google sucht nach "gson introduction java", dann finden sich auch sehr viele Einführungen zu gson. (Das gleiche gilt für Jackson wenn man das lieber verwenden möchte).

Aber bei gson läuft es oft auf etwas einfaches wie:
Java:
Gson gson = new Gson();
MyClass instance = gson.fromJson(jsonString, MyClass.class);
und
Code:
Gson gson = new Gson();
String jsonString = gson.toJson(instance);

Natürlich muss man Dinge nicht erst in einen String einlesen - es gibt auch Methoden, um z.B. mit Readern oder Writern direkt zu arbeiten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Sehr großen Graph mit Verbindungen bauen und minimieren? Allgemeine Java-Themen 35
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
P Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 5
R JDK installieren OpenJDK-Aufruf sehr langsam Allgemeine Java-Themen 4
Thallius String erzeugen sehr langsam Allgemeine Java-Themen 16
D Verwaltung von sehr vielen Objekten Allgemeine Java-Themen 12
S JNLP startet seit 1.8.0_31 sehr langsam + Windows-Systemverzeichnis Allgemeine Java-Themen 3
Creylon Java verursacht sehr starkes ruckeln Allgemeine Java-Themen 5
N Bin to Dez und umgekehrt mit sehr großen Zahlen Allgemeine Java-Themen 2
T Gleiche Operation dauert teilweise sehr lange Allgemeine Java-Themen 12
M Externe Jar sehr langsam Allgemeine Java-Themen 23
M JUnit & Multithreading - sehr seltener Fehler Allgemeine Java-Themen 3
H Sehr viele Threads effizient Verwalten Allgemeine Java-Themen 13
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
H Kopieren sehr langsam Allgemeine Java-Themen 5
B Cipher.getInstance Aufruf sehr langsam Allgemeine Java-Themen 2
nrg Arbeiten mit sehr großen CSV Dateien Allgemeine Java-Themen 20
K replaceAll bei sehr großen String Allgemeine Java-Themen 3
B Eingabemaske Komponenten aktivieren, funktionert nicht (sehr kurios) Allgemeine Java-Themen 2
hdi Heap Sapce Error bei sehr großem String Allgemeine Java-Themen 5
G RXTX library braucht sehr lange zum laden. Ist das normal? Allgemeine Java-Themen 8
L Java 1.5 - Anwendung unter 1.6 JRE sehr langsam geworden Allgemeine Java-Themen 8
O Speicherverbrauch von Java / VM sehr hoch? Allgemeine Java-Themen 27
M Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 8
G Lesen von sehr großen dateien Allgemeine Java-Themen 8
M String zusammensetzen->sehr langsam Allgemeine Java-Themen 3
G Sehr sehr merkwürdige Ereignisse mit Fibonacci Programm Allgemeine Java-Themen 6
G Sehr gutes Java-Framework(Gui-Builder) auf XML-Basis gesucht Allgemeine Java-Themen 21
E String.replace für (sehr) großen Text Allgemeine Java-Themen 9
T [SVNKit] Commit sehr langsam. Allgemeine Java-Themen 7
G Arraylist statt List - Sehr schlimm? Allgemeine Java-Themen 8
F JAVA Applikationen starten sehr langsam Allgemeine Java-Themen 14
D Datei öffnung sehr langsam Allgemeine Java-Themen 17
G Neue Warenwirtschaft aber sehr langsam! Allgemeine Java-Themen 3
H Entpacken sehr langsam Allgemeine Java-Themen 10
Bleiglanz Benchmarks sind sehr schwierig Allgemeine Java-Themen 2
kodela Unterschiedliches Verhalten von BufferedReader Allgemeine Java-Themen 3
J Unvorhersehbares Verhalten - benutze ich die falsche Bedingungsprüfung oder brauche ich Threads? Allgemeine Java-Themen 12
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
Thallius Merkwürdiges Verhalten von Swingworker.cancel() Allgemeine Java-Themen 2
T Merkwürdiges Thread-Verhalten Allgemeine Java-Themen 6
Tommy Nightmare Merkwürdiges Verhalten bei der Datenzuweisung Allgemeine Java-Themen 4
F JTable Pfeiltasten-Verhalten Allgemeine Java-Themen 1
Thallius Swing Merkwürdiges Verhalten beim Panel Tausch Allgemeine Java-Themen 3
W LocalDateTime Verhalten unerklärlich Allgemeine Java-Themen 1
Thallius Merkwürdiges StringBuilder verhalten (Char Encoding) Allgemeine Java-Themen 6
C Unterschiedliches Verhalten Editor und deployte Application Allgemeine Java-Themen 3
S Threads ThreadPoolExecutor eigenartiges verhalten Allgemeine Java-Themen 5
A Java Verhalten bei parallelem Aufruf derselben Methode?? Allgemeine Java-Themen 2
P Applet-Zugriffsrechte: merkwürdiges Verhalten Allgemeine Java-Themen 4
M Threads Viele Aufrufe aus Thread, komisches Verhalten Allgemeine Java-Themen 8
S getChildAt() Verhalten Allgemeine Java-Themen 4
S Frage zu Threads (Sichtbarkeit und Verhalten) Allgemeine Java-Themen 11
R Merkwürdiges Verhalten der equals Method Allgemeine Java-Themen 4
1 Collections Generics, internes Verhalten Allgemeine Java-Themen 16
S Collections Unverständliches Verhalten... Allgemeine Java-Themen 4
M Nach Programmdurchlauf werden Zeichen falsch dargestellt + Anderes Verhalten unter Windows Allgemeine Java-Themen 6
C Komisches Verhalten zwischen Set und List bei contains Allgemeine Java-Themen 6
S (Doppel)Klick-Verhalten vom Desktop unter Java imitieren. Allgemeine Java-Themen 5
A Seltsames Verhalten von JUnit-Tests im Zusammenspiel mit Ant Allgemeine Java-Themen 6
S Verhalten von System.getenv() in Ubuntu / Linux Allgemeine Java-Themen 12
hdi Verhalten bei nicht behandelten Exceptions Allgemeine Java-Themen 2
J Rätselhaftes Verhalten von Collections Allgemeine Java-Themen 5
M Unerklärliches Verhalten bei Variableninitialisierung Allgemeine Java-Themen 11
S Verhalten der Klasse TreeSet... Allgemeine Java-Themen 4
S Jar und Exe verhalten sich unterschiedlich unter Vista Allgemeine Java-Themen 8
M Seltsames Verhalten eines StringReaders Allgemeine Java-Themen 2
spacegaier HeapSpace der VM ändern -> Verhalten von JARs und EXEs Allgemeine Java-Themen 10
M merkwürdiges Verhalten von JUnit4 Allgemeine Java-Themen 2
M JList seltsames verhalten. Allgemeine Java-Themen 5
K Seltsames Verhalten von byte[] und Strings Allgemeine Java-Themen 6
S Seltsames Verhalten von split() Allgemeine Java-Themen 3
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2
A Streams: merkwürdiges Verhalten Allgemeine Java-Themen 7
A Streams - merkwürdiges Verhalten Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben