Verständnisfrage/Problem beim lesen mit ObjectInputStream

Status
Nicht offen für weitere Antworten.
E

exi

Gast
Hallo,

vorab verrate ich einmal, daß ich früher fleißig in Java war, dann aber zwei Jahre pausiert habe. Und nun seit wenigen Tagen wieder mit Java übe... und andauernd über Details aus anderen Sprachen stolpere. Wahrscheinlich steht mir momentan auch mein Vorwissen im Weg...

Mein Problem ist nur die Frage wie ich wiederholt eine (selbstgebastelte) Datei lesen und die vorgefundenen Daten in Objekten sichern kann. Konkret: wie generiere ich eine Wiederholungsschleife if(!eof), if-nicht-End-of-File?Wobei mir Tips aus Büchern und dem Netz bisher nur wenig geholfen haben. Es gibt *keine* Methode eof(), gut, hier habe ich wohl noch Pascal, C++ oder Fortran im Kopf. Meine Quellen nennen als Alternative die Methode read(), welches das fokusierte Byte erfasst und dahin gehend überprüft ob es noch existiert.

Angelegt hatte ich die Datei mit:
Code:
private void speicherAktion(final String ziel) {
        try {
            FileOutputStream fstream = new FileOutputStream(new File(ziel));
            ObjectOutputStream stream = new ObjectOutputStream(fstream);
            for (int i=0; i<Datenliste.size(); i++) stream.writeObject( (myFarbelement)(Datenliste.get(i)) );
            stream.close();
	}
	catch(java.io.FileNotFoundException ex){System.out.println("File not found error: "+ex);}
	catch(java.io.IOException ex){System.out.println("IOException error: "+ex);}
    }
myFarbelement ist dabei serialisiert und besteht aus je drei Integer. Effektiv lese ich eine Landkarte pixelweise ein, vermerke Längengrad, Breitengrad und die Pixelfarbe. Alle meine Punkte (etwa 10000 Stück) sammle ich in einer ArrayList um dann in obiger speicherAktion jeden einzelnen Datensatz zu sichern.Klappt problemlos.
Mein Problem ist das Einlesen in einem neuen Programm.
Code:
    private void LeseQuellDatei() {
        Quellliste=new ArrayList();
        File cfg = new File(Quelle.getText());
        
        if (cfg.exists()) {
            InputStream fis = null;
            try { 
                fis = new FileInputStream( cfg ); 
                ObjectInputStream o = new ObjectInputStream( fis ); 
                System.out.println("o.read= "+o.read());

//                while (o.read()!=-1) {
                    myFarbelement puffer = (myFarbelement) o.readObject();
                    Quellliste.add(puffer);
//                }
            } 
            catch ( IOException e ) { System.err.println( e ); } 
            catch ( ClassNotFoundException e ) { System.err.println( e ); } 
            finally { try { fis.close(); } catch ( Exception e ) { } }
        } else System.out.println(" Fehler! Quelldatei "+cfg+" existiert nicht! ");    
    }
Wobei diese auskommentierte Version noch funktioniert. Ich bekomme ein (1) Element eingelesen, dieses wird richtig gecastet und kannz.B. zum zeichnen eines Rechteckes verwendet werden.
Nur ist o.read() konsequent auf dem Wert -1! Die von der Literatur empfohlene Wiederholungsschleife wird nicht einmal betreten.
Eine feste Anzahl kann ich nicht vorgeben (will das Programm variabel halten), das mir im Kopf herumschwirrende EOF gibt es nicht, und irgendwie sehe ich vor lauter Bäumen den Wald nicht mehr.

Habt ihr mir irgendwelche Tips? Oder seht ihr mein Verständnisproblem?

danke
exi[/code]
 
S

SlaterB

Gast
nach einem groben Blick in die API
http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html
scheint wiederholtes Lesen bis zu einer EOFException ein normales Vorgehen zu sein,
aber lies dir das vielleicht nochmal selber durch,
in Lehrbüchern müsste es bei dem jeweiligen Thema doch auch stehen?

-------

ob read() geht kann ich nicht sagen, sieht ja nicht so aus,
aber sei froh, wenn mit read ein einzelnes Byte fehlen würde, wie soll dann das nächste Objekt korrekt gelesen werden? ;)
 
E

exi

Gast
Hallo SlaterB,

SlaterB hat gesagt.:
nach einem groben Blick in die API
http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html
scheint wiederholtes Lesen bis zu einer EOFException ein normales Vorgehen zu sein,
aber lies dir das vielleicht nochmal selber durch,
in Lehrbüchern müsste es bei dem jeweiligen Thema doch auch stehen?

-------

ob read() geht kann ich nicht sagen, sieht ja nicht so aus,
aber sei froh, wenn mit read ein einzelnes Byte fehlen würde, wie soll dann das nächste Objekt korrekt gelesen werden? ;)


danke für deine Einschätzung. Der Hinweis "scheint wiederholtes Lesen bis zu einer EOFException ein normales Vorgehen zu sein" ist zwar gruselig, grausig, eine Schande für jede ordentliche Programmiersprache, und ein absichtlicher Sprung über eine Klippe um deren Ende zu finden... aber tatsächlich: so klappt es.
Code:
            InputStream fis = null;
            try { 
                fis = new FileInputStream( cfg ); 
                ObjectInputStream o = new ObjectInputStream( fis ); 
                while (true) {  //--> huch! so was lese ich gar nicht gerne, da winkt doch die Endlosschleife :-)
                    myFarbelement puffer = (myFarbelement) o.readObject();
                    Quellliste.add(puffer);
                }
            } 
            catch ( IOException e ) { System.err.println( e ); } 
            catch ( ClassNotFoundException e ) { System.err.println( e ); } 
            finally { try { fis.close(); } catch ( Exception e ) { } }

Die API-Spezifikation behandelt leider nur den einfachen Fall bei dem ein Wert gelesen wird. Das war für mich gestern&heute ein Grund Bücher zu wälzen und im Netz zu recherchieren. Z.B. JavaIstNurEineInsel (http://www.galileocomputing.de/open...13_001.htm#mj5c3809c0318cfba5c2be67ad74adea6b) oder Programmiergrundlagen (http://www.abyter.de/java4-2.htm). Aber genau dort bin ich auf das Abfragen über read() gestoßen.

Nun ist jedenfalls mein Problem gelöst. Und ich wurde ganz direkt mit der Tatsache konfrontiert, daß Java eben doch anders als C++ ist. ;-)

danke
exi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
A Verständnisfrage Java Basics - Anfänger-Themen 12
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
P Verständnisfrage: PageFactory.initElements Java Basics - Anfänger-Themen 2
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
G while.next() Verständnisfrage Java Basics - Anfänger-Themen 16
Vivien Kurze Verständnisfrage zu Java Point aus java.awt.* Java Basics - Anfänger-Themen 5
C Erste Schritte Anfänger Verständnisfrage zum Compiler Java Basics - Anfänger-Themen 31
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
K Verständnisfrage Server/Client BufferedReader, PrintWriter Java Basics - Anfänger-Themen 2
Der Grütz Verständnisfrage zu Übung aus Java Kurs - Schaltjahr bestimmen Java Basics - Anfänger-Themen 2
J Verständnisfrage zu throws neben Funktionen Java Basics - Anfänger-Themen 2
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
P Verständnisfrage zum Mapping Java Basics - Anfänger-Themen 3
M Java Version Verständnisfrage Java Basics - Anfänger-Themen 16
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
T Verständnisfrage zur Konsolenausgabe Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
D Verständnisfrage zur Modellierung einer HDD Java Basics - Anfänger-Themen 17
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
S Verständnisfrage lokale Ordnerpfade Java Basics - Anfänger-Themen 1
T Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 7
J Java Starthilfe Verständnisfrage Aufgabe Java Basics - Anfänger-Themen 2
O Anfänger, Verständnisfrage Java Basics - Anfänger-Themen 3
C Verständnisfrage zu Modulo Java Basics - Anfänger-Themen 6
C Verständnisfrage bezüglich der Do-While Schleife Java Basics - Anfänger-Themen 9
L Verständnisfrage - Speicherabbild Java Basics - Anfänger-Themen 4
melly_ Verständnisfrage zu args Java Basics - Anfänger-Themen 3
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
K Verständnisfrage eines Abschnitts Java Basics - Anfänger-Themen 6
K Rekursion Verständnisfrage Java Basics - Anfänger-Themen 19
S Modell View Controller Verständnisfrage Java Basics - Anfänger-Themen 24
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
JavaTalksToMe Erste Schritte Println-Frage (Verständnisfrage) Java Basics - Anfänger-Themen 1
R Verständnisfrage zu Objekten u. Übergabeparameter Java Basics - Anfänger-Themen 8
G Collections Verständnisfrage zur For-Each-Schleife Java Basics - Anfänger-Themen 7
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
G Verständnisfrage zu for-each Java Basics - Anfänger-Themen 4
DontFeedTheTroll Erste Schritte Verständnisfrage zu If-Anweisung Java Basics - Anfänger-Themen 7
K Rekursion-Verständnisfrage Java Basics - Anfänger-Themen 4
J Java Server Pages - Verständnisfrage Java Basics - Anfänger-Themen 2
Z Verständnisfrage Anfängerprogramm Java Basics - Anfänger-Themen 0
T Verständnisfrage Zuweisungs-/arithmet. Operatoren Java Basics - Anfänger-Themen 2
G Methoden Verständnisfrage zur Methoden Java Basics - Anfänger-Themen 7
LionAge Kapselung, Verständnisfrage zur Objekterzeugung Java Basics - Anfänger-Themen 4
Z Verständnisfrage zum Multithreading Java Basics - Anfänger-Themen 3
R OOP / Verständnisfrage zum Konstuktor (siehe code) Java Basics - Anfänger-Themen 7
gamebreiti Verständnisfrage zu contains() Java Basics - Anfänger-Themen 10
A Verständnisfrage - Koordinatenumrechnung Java Basics - Anfänger-Themen 9
J Erste Schritte Verständnisfrage im Bezug auf das (richtige) Programmieren Java Basics - Anfänger-Themen 5
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
H Verständnisfrage Array Java Basics - Anfänger-Themen 2
I Interface Verständnisfrage Interfaces (Bsp.: Enumeration) Java Basics - Anfänger-Themen 2
I Verständnisfrage zu BridgePattern, Verwedung von super() Java Basics - Anfänger-Themen 4
P Verständnisfrage Java Basics - Anfänger-Themen 3
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
D Input/Output Verständnisfrage Verzeichnis-/Dateiliste erstellen & Dateikonvertierung Java Basics - Anfänger-Themen 1
S Verständnisfrage zu Anweisungen und deren Wirkung Java Basics - Anfänger-Themen 7
H Verständnisfrage für oder Anweisung Java Basics - Anfänger-Themen 8
E Threads Verständnisfrage bzgl. Threads und Sleep Java Basics - Anfänger-Themen 2
T Erste Schritte Verständnisfrage: Getter und Setter Methoden Java Basics - Anfänger-Themen 3
H Verständnisfrage zu Java-Ausgabe Java Basics - Anfänger-Themen 3
S Verständnisfrage Java Basics - Anfänger-Themen 2
N Verständnisfrage Code Java Basics - Anfänger-Themen 8
B Verständnisfrage Java Basics - Anfänger-Themen 2
H Interface Comparable Verständnisfrage Java Basics - Anfänger-Themen 6
B Verständnisfrage Codezeile Java Basics - Anfänger-Themen 7
B Verständnisfrage:Beispielprogramm BlueJ Java Basics - Anfänger-Themen 3
M Kurze Verständnisfrage zu einer Java Aufgabe Java Basics - Anfänger-Themen 12
K Erste Schritte Kleine Verständnisfrage Java Basics - Anfänger-Themen 12
R Verständnisfrage Referenzvariablen in array Java Basics - Anfänger-Themen 3
M Verständnisfrage: Objekt erzeugen u. zuweisen Java Basics - Anfänger-Themen 16
I OOP Verständnisfrage zu Singelton Pattern Java Basics - Anfänger-Themen 21
M Verständnisfrage zu JPanel Java Basics - Anfänger-Themen 3
S Verständnisfrage: Exception Gebrauch Java Basics - Anfänger-Themen 2
R Verständnisfrage NPE Java Basics - Anfänger-Themen 5
M Verständnisfrage zur Zahlenumwandlung (Dezimal-->Dual) Java Basics - Anfänger-Themen 25
P Java Objekte - Verständnisfrage Java Basics - Anfänger-Themen 9
N Verständnisfrage zu folgendem Programm Java Basics - Anfänger-Themen 2
L Grundlegende Verständnisfrage Hasmap Referenzen Java Basics - Anfänger-Themen 4
S Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 2
VfL_Freak Verständnisfrage zur Klasse "TIMER" Java Basics - Anfänger-Themen 7
P Verständnisfrage zu Instanzen/Objekten Java Basics - Anfänger-Themen 9
M Verständnisfrage im Umgang mit Map Java Basics - Anfänger-Themen 10
K Verständnisfrage zu int.length und String.length() Java Basics - Anfänger-Themen 4
G 2D Array gleichsetzen verständnisfrage Java Basics - Anfänger-Themen 2
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
N verständnisfrage java.util.Calendar Java Basics - Anfänger-Themen 4
G Datentypen bits, bytes, chars - Verständnisfrage Java Basics - Anfänger-Themen 5
E Verständnisfrage zu Shutdownhook Java Basics - Anfänger-Themen 5
D Verständnisfrage: Java und MySql Java Basics - Anfänger-Themen 3
F Rekursion Verständnisfrage Java Basics - Anfänger-Themen 6
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
Z Comparator Verständnisfrage Java Basics - Anfänger-Themen 5
D Verständnisfrage zu Funktionen Java Basics - Anfänger-Themen 6
H Verständnisfrage Persistenz Java Basics - Anfänger-Themen 10
neurox Verständnisfrage zu Threads Java Basics - Anfänger-Themen 4
E Verständnisfrage Syntax: frame.getContentPane().add(button) Java Basics - Anfänger-Themen 11
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben