PDA

View Full Version : [Java] FileInputStream metodo read


hee136
05-04-2013, 15:25
Riporto da javadoc:

public int read(byte[] b)
Reads up to b.length bytes of data from this input stream into an array of bytes. This method blocks until some input is available.


Il metodo read legge da un file un numero di byte pari alla lunghezza dell'array b.
Se i byte sono presenti nel file, allora nessun problema.
Se non sono presenti, allora l'esecuzione viene bloccata finchè i byte non diventano disponibili.
Quali sono i casi in cui la read può essere bloccata?

(perchè se il file contiene meno byte di quelli richiesti, alla fine è però presente il carattere di fine file e quindi la lettura va comunque a buon fine)

hee136
05-04-2013, 15:27
http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html#read(byte[])

wingman87
05-04-2013, 17:05
Il metodo read legge da un file un numero di byte pari alla lunghezza dell'array b.


La traduzione corretta è: legge fino a b.length byte da questo stream di input. Il metodo è bloccante finché non è disponibile qualcosa in input.
Questo significa che se c'è qualcosa da leggere il metodo non si blocca. Inoltre significa anche che se ci sono meno byte di b.length da leggere, vengono letti meno byte ma il metodo non si blocca. Per sapere il numero di byte letti devi leggere il valore int restituito.
Può succedere che non ci siano byte da leggere e non sia stato ancora raggiunta la fine del file, ad esempio quando si sta leggendo/scaricando un file dalla rete possono esserci brevi interruzioni nel flusso.