/ / Java: InputStream. Stream di input

Java: InputStream. Stream di input

Java, come molti linguaggi moderniprogrammazione, supporta l'implementazione di flussi di input di dati. In Java, InputStream è la classe base per i flussi di byte. Questa classe è astratta, cioè, mentre il programma è in esecuzione, non possiamo crearne un'istanza. Tuttavia, il pacchetto io contiene molte classi che ereditano ed estendono la funzionalità di InputStream. Per usare questa classe nel tuo codice, devi importarla dal pacchetto java.io.InputStream. Successivamente, esamineremo le funzionalità di base fornite dalla classe InputStream, nonché le classi principali che la implementano.

Metodi di classe InputStream

Prima di iniziare uno studio dettagliatometodi della classe InputStream, va detto che implementa le interfacce Closeable e AutoCloseable. L'interfaccia Closeable ci dice che quando finisci di lavorare con uno stream, questo deve essere chiuso. Questo viene fatto usando il metodo close(). Poiché la maggior parte dei metodi della classe InputStream genera una IOException in caso di errore, tutte le operazioni devono essere eseguite nel blocco try e il metodo close() deve essere inserito nel blocco finalmente in modo che funzioni indipendentemente dal risultato del lavoro nel corpo di prova.

L'interfaccia AutoCloseable riduce notevolmentela quantità di codice tecnico perché consente al metodo close() di attivarsi automaticamente e di non aggiungere un blocco finalmente al codice. Se stai usando la settima versione o successiva di Java, InputStream può essere inserito in un cosiddetto try with resource, che si occupa di tutte le operazioni di chiusura degli stream.

java inputstream in stringa

Diamo un'occhiata ai metodi principali della classe InputStream:

  • int available() - restituisce il numero di byte disponibili per la lettura;
  • int read() - prende il byte corrente dalla risorsa e lo restituisce in rappresentazione intera; se tutti i byte sono stati letti, restituisce -1;
  • int read (byte [] buffer) - legge i byte disponibili inil buffer specificato sotto forma di array di tipo byte (il numero di byte letti è uguale alla dimensione del buffer specificato; restituisce il numero di byte letti; se vengono letti tutti i byte disponibili, restituisce -1);
  • int read (byte [] buffer, int offset, intnumero di byte) - un sovraccarico del metodo precedente, fa lo stesso, ma dalla posizione specificata nell'"offset" e ne legge tanti quanti specificati nel "numero di byte";
  • long skip (numero lungo di byte) - Salta il numero di byte specificato e restituisce il numero effettivo di byte ignorati.

InputStream è implementato da diverse classi progettate per funzionare con diverse origini e tipi di dati. Di seguito è riportato l'albero dell'eredità.

flusso di input java

Lettura di file

Flusso di byte per leggere informazioni dai fileimplementato dalla classe FileInputStream. Per aprire un file in lettura byte è sufficiente creare un'istanza di questa classe, passando il nome del file come argomento al suo costruttore. Se il file con il nome passato non esiste, verrà generata un'eccezione di tipo FileNotFoundException.

Se il file viene aperto correttamente, il lavoro con esso viene eseguito utilizzando i metodi descritti sopra, poiché FileInputStream eredita da InputStream.

Lettura di tipi di dati primitivi

L'esempio precedente descriveva il lavoro convalori di byte che possono essere interpretati come caratteri. Ma cosa succede se abbiamo bisogno di leggere un valore intero, frazionario o booleano? Per fare ciò, in Java, InputStream viene indirettamente esteso dalla classe DataInputStream. Questa classe è un wrapper per un InputStream che gli viene passato quando viene creato come argomento del costruttore. Questo tipo di flusso legge i dati in formato binario.

DataInputStream implementa anche l'interfaccia DataInput e i suoi metodi per leggere i tipi di dati primitivi. Di seguito è riportato un elenco di questi metodi.

java io inputstream

I nomi dei metodi parlano da soli: ognuno di essi è progettato per leggere un tipo specifico di dati.

Flusso di ingresso bufferizzato

È implementato un flusso di dati di lettura bufferizzatola classe BufferedInputStream in Java. InputStream è avvolto con questa classe. Questa classe integra il flusso con un buffer, che consente di leggere contemporaneamente non uno, ma diversi byte. Ciò consente di aumentare significativamente la produttività dell'operazione. BufferedInputStream è un discendente indiretto di InputStream e quindi eredita tutti i metodi precedenti.

Questa classe ha due costruttori:

  • BufferedInputStream (flusso di input InputStream);
  • BufferedInputStream (flusso di input InputStream, dimensione del buffer int)

Dalle firme dei costruttori si evince che il primo imposta la dimensione del buffer di default, mentre il secondo ha la possibilità di impostarla manualmente.

conclusione

Abbiamo coperto le principali implementazioni di InputStream. Se hai bisogno di convertire i byte ricevuti in una stringa, allora in Il Java InputStream to String(), sfortunatamente, non è sovraccaricato, quindi è necessario utilizzare utilità speciali per questo, ad esempio IOUtils dalla libreria Apache Commons.

piaciuto:
0
Post popolari
Sviluppo spirituale
cibo
y