ObjectInputStream - Arrayliste, die unbekannte Objekte enthält

T

TylerDurden_

Gast
Hey,

ich will mit dem ObjectInputStream eine Liste aus einer Datei lesen, weiß aber nicht welchen Typ die Objekte in der Liste haben? Wie kann ich das machen?

Habe es schon mit Sachen probiert wie:
Java:
ArrayList obj = (ArrayList)ois.readObject();
Java:
oder:
ArrayList<Object> obj = (ArrayList<Object>)ois.readObject();

Gibt aber alles ne Exception.

Jemand ne Idee? Danke schonmal!
 

eRaaaa

Top Contributor
Gibt aber alles ne Exception.

Und welche genau? Also wenn`s eine CastException ist, wie lautet die genaue Fehlerbeschreibung? Sicher dass das erste Objekt/das Objekt welches du liest eine ArrayList ist? Keine LinkedList oder sonst eine Liste oder sogar ein ganz anderes Objekt (also keine Liste? )

Ansonsten mal einfach
Code:
Object obj
benutzen und nicht casten und sich dann mal anschauen um was es sich dort genau handelt :)
 
T

TylerDurden_

Gast
Folgender Code gibt mir die folgende Exception:
Java:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\test\\hosts.ser"));
	 	Object obj = ois.readObject();


Exception in thread "main" java.io.EOFException
at java.io_ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
at java.io_ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3018)
at java.io_ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2819)
at java.io_ObjectInputStream.readString(ObjectInputStream.java:1598)
at java.io_ObjectInputStream.readObject0(ObjectInputStream.java:1319)
at java.io_ObjectInputStream.readArray(ObjectInputStream.java:1666)
at java.io_ObjectInputStream.readObject0(ObjectInputStream.java:1322)
at java.io_ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io_ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io_ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io_ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io_ObjectInputStream.readObject(ObjectInputStream.java:350)
at java.util.ArrayList.readObject(ArrayList.java:593)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io_ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io_ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at java.io_ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io_ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io_ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io_ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io_ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io_ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io_ObjectInputStream.skipCustomData(ObjectInputStream.java:1911)
at java.io_ObjectInputStream.readSerialData(ObjectInputStream.java:1873)
at java.io_ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io_ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io_ObjectInputStream.readObject(ObjectInputStream.java:350)
at Testing.main(Testing.java:12)
 
S

SlaterB

Gast
heißt: nix drin

edit: obwohl ich bei der Länge der Exception dann auch nicht sicher bin, vielleicht unvollständige Datei?
wie wird gespeichert, von dir, welcher Code?
 
T

TylerDurden_

Gast
Datei ist nicht von mir.

Und sie ist definit nicht leer. Sollte eigentlich auch nicht kaputt sein oder so...
 
S

SlaterB

Gast
nun, wenn diese beiden Befehle schon zur Exception führen, dann kann man wohl nichts weiter dazu sagen,
ein anderes Vorgehen gibt es nicht

edit:
immer fällt mir nochwas ein: vielleicht enthält sie Objekte unbekannter Klassen, und es wird versucht diese Klassen nachzuladen da lokal nicht vorhanden, welche im Stream dann auch nicht da sind,
aber das ist jetzt ganz wilde Spekulation, ich selber kann dazu fast nichts sagen
 
Zuletzt bearbeitet von einem Moderator:
T

TylerDurden_

Gast
Super, das war die Lösung. Die Klasse war nicht sichtbar in der Methode, in der die Datei eingelesen wurde.

Nun habe ich aber das nächste Problem: Ich habe ein Objekt und muss herausfinden von welchem Typ es sich handelt. Es ist immer in einer Liste, aber ich kann nicht rausfinden, von welchem Typ die enthaltenen Objekte sind, da ich ja nicht z.b. auf den ersten Index zugreifen und getClass() aufrufen kann, da man zur Compile-Zeit ja nicht weiß, dass es eine Liste ist...

Wie kann ich dieses Problem lösen?
 
S

SlaterB

Gast
verrückt, dass das richtig war,

so, zur neuen Frage:
wenn du nicht weißt wie du auf die Elemente zugreifen kannst, was interessiert dich dann der Typ der Elemente?
die Frage wie man auf die Elemente zugreifen kann wäre für mich spannend genug.. ;)

wenn es eine normale Liste ist, dann kannst du auf das Interface java.util.List casten, get() und Co. sind dann verfügbar,
für die Elemente vielleicht instanceof-Test
 

Paeddah

Mitglied
Hmm,

da wäre die Frage, ob die Objekte in der Liste ein bestimmtes Interface implementieren - müssen -.

Dann kannst du, nach dem Cast auf java.util.List, das Objekt an der jeweiligen Stelle auf das Interface casten und damit arbeiten,

Falls die Liste jedoch beliebige Objekte enthalten kann, dann wirst du um eine instanceof-Schlange, die alle möglichen enthaltenen Typen enthält nicht herum kommen.

Grüße

Päddah
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Auslesefehler beim ObjectInputStream(Array) Allgemeine Java-Themen 6
P ObjectOutputStream oder ObjectInputStream fehlerhaft? Allgemeine Java-Themen 7
K Input/Output ObjectInputStream.HandleTable OutOfMemory Allgemeine Java-Themen 8
P ObjectInputStream kann nicht vernünftig lesen... Allgemeine Java-Themen 9
T Klasse in externer JAR mit ObjectInputStream Allgemeine Java-Themen 14
B ObjectInputStream - Wann ist Ende erreicht? Allgemeine Java-Themen 10
J ObjectInputStream und OutOfMemory Allgemeine Java-Themen 10
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
H ArrayListe in CSV Datei speichern Allgemeine Java-Themen 6
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Y ArrayListe eingegebenen index entfernen Allgemeine Java-Themen 1
kodela Arrayliste mit Arrayliste realisieren Allgemeine Java-Themen 14
GreenTeaYT Verstehe nicht ganz das Observer Pattern in einer Arrayliste? Allgemeine Java-Themen 3
M ArrayListe & Mac Allgemeine Java-Themen 1
S Erste Schritte Arrayliste alphabetisch sortieren mit Eingabe Allgemeine Java-Themen 9
S Element aus ArrayListe löschen --> Thread hängt sich auf Allgemeine Java-Themen 2
A ArrayListe :Doppelte entfernen -> keine Referenzen Allgemeine Java-Themen 26
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
E Interpreter-Fehler unbekannte Exception Allgemeine Java-Themen 12
D unbekannte Anzahl checkboxes Allgemeine Java-Themen 2
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
T Unbekannte Fehlermeldung + Lösung? Allgemeine Java-Themen 4
T ClassLoader und Zugriff auf unbekannte Klassen Allgemeine Java-Themen 5
M Verschachtelte Schleifen (unbekannte Tiefe) Allgemeine Java-Themen 3
thE_29 Externe (unbekannte) Klasse nutzen Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben