Java, come molte lingue moderneprogrammazione, supporta l'implementazione dei flussi di inserimento dati. In Java, InputStream è la classe base per i flussi di byte. Questa classe è astratta, cioè, nel processo del programma non possiamo creare la sua istanza. Tuttavia, nel pacchetto io, ci sono molte classi che ereditano ed estendono la funzionalità di InputStream. Per utilizzare questa classe nel codice, è necessario importarla dal pacchetto java.io.InputStream. Successivamente, esamineremo la funzionalità di base fornita dalla classe InputStream e le principali classi che la implementano.
Prima di procedere a uno studio dettagliatometodi della classe InputStream, si dovrebbe menzionare che implementa le interfacce Closeable e AutoCloseable. L'interfaccia Closeable ci dice che quando si chiude il thread, deve essere chiuso. Questo viene fatto usando il metodo close (). Poiché la maggior parte dei metodi della classe InputStream genera un'eccezione di tipo IOException in caso di errore, tutte le operazioni devono essere eseguite nel blocco try e il metodo close () deve essere sottoposto al blocco finally per funzionare indipendentemente dal risultato del lavoro nel corpo try.
L'interfaccia AutoCloseable si riduce in modo significativola quantità di codice tecnico, perché consente al metodo close () di funzionare automaticamente e non aggiungere un blocco finale al codice. Se si utilizza una settima o versione successiva di Java, è possibile inserire InputStream in un cosiddetto try with resources, che si occupa di tutte le operazioni di chiusura.
Considera i metodi principali della classe InputStream:
InputStream è implementato da diverse classi, progettate per funzionare con diverse fonti e tipi di dati. L'albero dell'eredità è presentato di seguito.
Byte stream per leggere le informazioni dai fileimplementato dalla classe FileInputStream. Per aprire un file per la lettura di byte, è sufficiente creare un'istanza di questa classe, passando il nome del file al costruttore come argomento. Se il file con il nome specificato non esiste, verrà generata un'eccezione di tipo FileNotFoundException.
In caso di apertura riuscita di un file, il lavoro con esso viene eseguito utilizzando i metodi descritti sopra, poiché FileInputStream è il successore di InputStream.
L'esempio precedente ha descritto il lavoro convalori di byte che possono essere interpretati come simboli. Ma cosa succede se abbiamo bisogno di leggere un valore intero, frazionale o logico? Per fare ciò, in Java InputStream viene indirettamente espanso dalla classe DataInputStream. Questa classe è il wrapper per InputStream, che viene passato ad esso quando viene creato come argomento per il costruttore. Questo tipo di flusso legge i dati in forma binaria.
DataInputStream implementa anche l'interfaccia DataInput e dei suoi metodi per la lettura di tipi di dati primitivi. Di seguito è riportato un elenco di questi metodi.
I nomi dei metodi parlano da soli: ognuno di essi è destinato alla lettura di un determinato tipo di dati.
Il flusso di lettura dei dati bufferizzati è implementatola classe BufferedInputStream in Java. InputStream è racchiuso in questa classe. Questa classe completa il flusso con un buffer, che consente di leggere più di un byte alla volta. Ciò consente di migliorare significativamente le prestazioni dell'operazione. BufferedInputStream è un discendente indiretto di InputStream e, di conseguenza, eredita tutti i metodi precedenti.
Questa classe ha due costruttori:
Dalla firma dei costruttori, è possibile capire che il primo imposta la dimensione del buffer per impostazione predefinita e nella seconda è possibile impostarlo manualmente.
Abbiamo coperto l'implementazione di base di InputStream. Se è necessario convertire i byte ricevuti in una stringa, quindi in Java InputStream to String (), sfortunatamente, non è sovraccarico, quindi per questo dovrai usare utility speciali, ad esempio IOUtils dalla libreria Apache Commons.
</ p>