Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479

    Leggere oggetti da file

    Ciao a tutti, ho scritto il seguente codice per scrivere su file:

    codice:
    try
    		{
    			ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(f) );
    			
    			for( int i = 0; i < vectorList.size(); i++ )
    			{
    				MioOggetto s = vectorList.get(i);
    				out.writeObject( s );
    			}
    		}
    		catch( IOException e ){ System.err.println("Scrittura: " + e); }
    e leggo cosi:

    codice:
    ObjectInputStream in = new ObjectInputStream( new FileInputStream(f) );
    			
    			MioOggetto s = (MioOggetto) in.readObject();
    			while( s != null )
    			{
    				/*Alcune operazioni*/
    				s = (Servlet)in.readObject();
    				servletLetti++;
    			}
    Mi da pero' EOFException, generato da MioOggetto s = (MioOggetto) in.readObject();

    dove sbaglio?

    grazie dell'aiuto!
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Leggere oggetti da file

    Originariamente inviato da Poker1
    Mi da pero' EOFException, generato da MioOggetto s = (MioOggetto) in.readObject();

    dove sbaglio?
    Lo sbaglio è concettuale. Quando leggi, come fai a sapere quanti oggetti ci sono?? Le strade sono diverse: o leggi in continuazione aspettandoti ad un certo punto un EOFException (= non ci sono più oggetti) oppure prima di scrivere gli oggetti scrivi ad esempio un 'int' che indica quanti oggetti ci sono e poi in lettura leggi il numero e gli N oggetti (e se becchi EOFException allora è un errore perché indica un file in qualche modo corrotto o comunque non come ti aspettavi).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Ho modificato cosi' ma mi da ancora EOF:

    codice:
    ObjectInputStream in = new ObjectInputStream( new FileInputStream(f) );
    			
    int letture = in.readInt();
    			
    for( int i = 0; i < letture; i++ )
    	System.out.println("Letto");
    codice:
    ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(f) );
    			
    out.writeInt( vectorList.size() );
    			
    for( int i = 0; i < vectorList.size(); i++ )
    {
    	MioOggetto s = VectorList.get(i);
    	out.writeObject( s );
    }
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  4. #4
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Ho risolto.
    Dopo la scrittura ho messo una out.flush().

    Forse gli oggetti erano talmente pochi che il buffer non si riempiva e quindi restavano in sospeso e quando il programma terminava lui non aveva scritto.
    C'e' un modo di impostare la dimensione del buffer cosi' da eliminare la flush?
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Poker1
    C'e' un modo di impostare la dimensione del buffer cosi' da eliminare la flush?
    Più che fare un flush() dovresti sempre fare un close() quando hai finito di fare I/O.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.