Toon posts:

ObjectStream While loop geeft EOF exception

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dag alle,

Ik ben bezig met het schrijven van een applicatie die objecten inleest van een dat bestand. Nu heb ik het volgende probleem. Ik probeer deze in te lezen in mijn vector, echter ik krijg een EOF, terwijl ik deze probeer af te vangen. (er staat 1 object in dit bestand om te testen als ik nammelijk de loop weglaat leest ie dit bestand in).

Ik gebruik de volgende code

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// inlezen Vector

    try
    {
    ObjectInputStream invoer = new ObjectInputStream(new FileInputStream("data/data.dat"));
    vector.clear();

    int i=0;
    Artikel inleesartikel=(Artikel)invoer.readObject();
    while (inleesartikel != null )
    {
      vector.add((Artikel)invoer.readObject());
      list.add(vector.get(i).toString());
      i++;
    }
    
    invoer.close();
    }

    catch(IOException es)
    {
      System.out.println(es);

    }

    catch(ClassNotFoundException cnfe)
    {
      System.out.println(cnfe);
    }


Ik heb inmiddels al wat stoms gezien nammelijk de 2de readobject

ik heb dit vervangen door
code:
1
2
3
4
5
6
7
 Artikel inleesartikel=(Artikel)invoer.readObject();
    while (inleesartikel != null )
    {
      vector.add(inleesartikel);
      list.add(vector.get(i).toString());
      i++;
    }


maar nu krijg ik de volgende melding

java.lang.OutOfMemoryError
Exception in thread "main"

[ Voor 18% gewijzigd door Verwijderd op 28-01-2005 14:13 ]


  • RSchellhorn
  • Registratie: Augustus 2001
  • Laatst online: 15-05 13:17
Wanneer zou inleesartikel ook null moeten worden ? Je stopvoorwaarde van je while-lus klopt niet.

"Ik heb zo veel soep gegeten, dat kan een mens niet aan. Ik heb zo veel soep gegeten, kan bijna niet meer staan. Ik zat daar maar te slurpen achter die grote kop en als ik bijna klaar was, dan schepten ze weer op!" (Hans Teeuwen)


  • Daventry
  • Registratie: Oktober 2004
  • Laatst online: 21-04-2025
Wat jij doet is een object inlezen en dat dit object in je vector steken en dit blijven herhalen tot op een of andere magische wijze dat object eens ooit null wordt, wat niet zal gebeuren omdat je in je lus niet inleest

probeer dit eens:

Java:
1
2
3
4
Artikel inleesartikel;
while ( (inleesartikel=(Artikel)invoer.readObject()) != null ) {
   // toevoegen aan die vector
}



(oh en voeg ff [JAVA] toe in je topictitel ... het is hier de gewoonte de taal te vermelden in je subject)

[ Voor 15% gewijzigd door Daventry op 28-01-2005 14:32 ]


Verwijderd

Topicstarter
Das inderdaad waar want ik leer het niet meer in |:( .

Nu heb ik dus de code als volgt aangepast
code:
1
2
3
4
5
6
7
8
   int i=0;
    Artikel inleesartikel;
    while ((inleesartikel=(Artikel)invoer.readObject())!=null )
    {
      vector.add(inleesartikel);
      list.add(vector.get(i).toString());
      i++;
    }


en ja hoor weer de bekende java.io.EOFException.

Wat ik echter wel gelezen heb dat als ik op het einde van mijn stream ben ik de waarde -1 zou terug krijgen zou ik hier wat mee kunnen

  • Daventry
  • Registratie: Oktober 2004
  • Laatst online: 21-04-2025
Verwijderd schreef op vrijdag 28 januari 2005 @ 14:36:
Das inderdaad waar want ik leer het niet meer in |:( .

Nu heb ik dus de code als volgt aangepast
code:
1
2
3
4
5
6
7
8
   int i=0;
    Artikel inleesartikel;
    while ((inleesartikel=(Artikel)invoer.readObject())!=null )
    {
      vector.add(inleesartikel);
      list.add(vector.get(i).toString());
      i++;
    }


en ja hoor weer de bekende java.io.EOFException.

Wat ik echter wel gelezen heb dat als ik op het einde van mijn stream ben ik de waarde -1 zou terug krijgen zou ik hier wat mee kunnen
lang geleden dat ik dit nog in JAVA heb gedaan dus euhh

Je kan natuurlijk altijd rond je while lus een try/catch (EOFException) blok zetten, lijkt me niet de meest propere manier maar geen idee of het in java ook anders kan

Verwijderd

Topicstarter
ja die vang ik dus volgens mij al af met de Catch (IOException es) maar nog is mijn vector dus leeg als ik het programma draai

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
try
    {
    ObjectInputStream invoer = new ObjectInputStream(new FileInputStream("data/data.dat"));
    vector.clear();

    int i=0;
    Artikel inleesartikel;
    while ((inleesartikel=(Artikel)invoer.readObject())!=null ) 
    {
      vector.add(inleesartikel);
      list.add(vector.get(i).toString());
      i++;
    }

    invoer.close();
    }

    catch(IOException es)
    {
      System.out.println(es);

    }
    
 

    catch(ClassNotFoundException cnfe)
    {
      System.out.println(cnfe);
    }
Pagina: 1