Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Problema con EOF

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    46

    Problema con EOF

    Ciao,
    ho un problema con la lettura della fine del file.Ho un metodo readChar() in cui richiamo il metodo read di un pushbackreader che legge un carattere come intero dal file e restituisco un carattere, castando l'intero letto dal file. Ora però con questo carattere non riesco a verificare se rappresenta EOF in quanto il -1 non è rappresentabile come carattere. Mi stampa infatti un carattere non riconosciuto. Chiedevo quindi se cè un modo per rilevare la fine del file avendo un tipo char e non intero.

    codice:
    private char readChar() throws IOException {        
            int i = Buffer.read();
            return (char) i;        
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Giuso Visualizza il messaggio
    Ora però con questo carattere non riesco a verificare se rappresenta EOF in quanto il -1 non è rappresentabile come carattere. Mi stampa infatti un carattere non riconosciuto. Chiedevo quindi se cè un modo per rilevare la fine del file avendo un tipo char e non intero.
    Precisiamo una cosa: il cast di -1 a char lo fa diventare un char di codice 0xFFFF (nella notazione Unicode: U+FFFF). Che per definizione Unicode (vedere es. https://en.wikipedia.org/wiki/Specials_(Unicode_block) ) è un "not a character". Quindi in linea di principio si potrebbe forse usare nel tuo caso specifico per indicare EOF, sebbene non sia proprio ortodosso al massimo (dipende da chi/dove usa quel tuo readChar() ).

    Ci sono comunque alcune alternative:

    a) Se Buffer.read() dà -1, fai lanciare java.io.EOFException, che è fatta apposta per questo.
    b) Se Buffer.read() dà -1 setti un flag nel tuo oggetto, che poi puoi testare in un secondo momento.

    Ci potrebbero essere altri design ma bisognerebbe entrare più nel merito di quello che stai cercando di fare.
    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
    Registrato dal
    Jan 2018
    Messaggi
    46
    Direi che ho risolto usando un flag booleano e faccio il test su quello. Oppure cambio il tipo di ritorno da readChar lasciando intero e il cast lo faccio solo dopo aver testato l'intero.
    Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Giuso Visualizza il messaggio
    Oppure cambio il tipo di ritorno da readChar lasciando intero e il cast lo faccio solo dopo aver testato l'intero.
    Che però così renderebbe (almeno per quello che si è visto del codice) poco utile quel tuo readChar(). Che è private, quindi usato solo all'interno della tua classe. E se fai restituire quindi direttamente il risultato di Buffer.read(), quale "valore aggiunto" avrebbe il tuo readChar ?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    46
    Hai perfettamente ragione, non ci avevo fatto caso.

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.