Come leggere e scrivere stream di byte

La lettura e la scrittura di flussi binari è una delle attività I / O più comuni che un'applicazione Java può eseguire. Può essere eseguito osservando ogni singolo byte in un flusso o usando un approccio bufferizzato più strutturato.

Nota: Questo articolo esamina la lettura di dati binari da a

example.jpg
file. Se provi questo codice, sostituisci semplicemente il nome di
example.jpg
con il percorso e il nome di un file jpeg sul tuo computer.

Byte by Byte

Il

java.io
class è stata la prima API Java a fornire funzionalità di Input / Output. Ha due metodi che possono essere utilizzati per immettere e emettere flussi di byte (blocchi di 8 bit) da e verso un file. Queste classi sono le
FileInputStream
e
FileOutputStream
. Questi metodi forniscono un metodo di base di I / O consentendo a un file di essere immesso o emesso un byte alla volta. In pratica è meglio usare un metodo bufferizzato per i flussi binari, ma è bene guardare il blocco base più elementare della funzionalità I / O Java.

Si noti come posizioniamo la gestione degli I / O all'interno di a

prova, cattura, finalmente
block-this è per assicurarsi che gestiamo le eccezioni IO e per chiudere correttamente i flussi. Il blocco catch mostrerà eventuali eccezioni I / O che si verificano e stamperà un messaggio per l'utente. Nel blocco finally è importante chiudere esplicitamente i flussi chiamando il metodo close altrimenti rimarranno aperti e uno spreco di risorse. C'è un controllo per vedere se il
FileInputStream
e
FileOutputStream
sono null prima di tentare di chiudere. Questo perché potrebbe verificarsi un errore I / O prima dell'inizializzazione dei flussi. Ad esempio, se il nome del file non è corretto, il flusso non verrà aperto correttamente
provare
blocco possiamo aggiungere il codice da leggere nei byte: il
leggere
Il metodo legge in un byte dal
FileInputStream
e il metodo write scrive un byte nel file
FileOutputStream
. Quando viene raggiunta la fine del file e non vi sono più byte da inserire, viene restituito il valore -1.

Ora che Java 7 è stato rilasciato, puoi vedere il vantaggio di una delle sue nuove funzionalità: provare con il blocco delle risorse. Ciò significa che se identifichiamo i flussi sul blocco try all'inizio, questo gestirà la chiusura del flusso per noi. Ciò elimina la necessità del blocco finally nell'esempio precedente:

Gli elenchi completi del codice Java per le due versioni del programma di lettura byte sono disponibili nel codice di esempio del flusso binario.