Java BufferedInputStream (con esempi)

In questo tutorial, impareremo a conoscere Java BufferedInputStream e i suoi metodi con l'aiuto di esempi.

La BufferedInputStreamclasse del java.iopacchetto viene utilizzata con altri flussi di input per leggere i dati (in byte) in modo più efficiente.

Estende la InputStreamclasse astratta.

Funzionamento di BufferedInputStream

Il BufferedInputStreammantiene un interno di buffer di 8192 byte .

Durante l'operazione di lettura in BufferedInputStream, un blocco di byte viene letto dal disco e memorizzato nel buffer interno. E dal buffer interno i byte vengono letti individualmente.

Pertanto, il numero di comunicazioni con il disco è ridotto. Questo è il motivo per cui la lettura dei byte è più veloce utilizzando l'estensione BufferedInputStream.

Crea un BufferedInputStream

Per creare un BufferedInputStream, dobbiamo java.io.BufferedInputStreamprima importare il pacchetto. Una volta importato il pacchetto, ecco come possiamo creare il flusso di input.

 // Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file); 

Nell'esempio precedente, abbiamo creato un BufferdInputStreambuffer denominato con il FileInputStreamfile denominato.

Qui, il buffer interno ha la dimensione predefinita di 8192 byte. Tuttavia, possiamo specificare anche la dimensione del buffer interno.

 // Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size); 

Il buffer aiuterà a leggere i byte dai file più rapidamente.

Metodi di BufferedInputStream

La BufferedInputStreamclasse fornisce implementazioni per diversi metodi presenti nella InputStreamclasse.

metodo read ()

  • read() - legge un singolo byte dal flusso di input
  • read(byte() arr) - legge i byte dal flusso e li memorizza nell'array specificato
  • read(byte() arr, int start, int length) - legge il numero di byte uguale alla lunghezza dal flusso e memorizza nell'array specificato a partire dall'inizio della posizione

Supponiamo di avere un file denominato input.txt con il seguente contenuto.

 This is a line of text inside the file. 

Proviamo a leggere il file usando BufferedInputStream.

 import java.io.BufferedInputStream; import java.io.FileInputStream; class Main ( public static void main(String() args) ( try ( // Creates a FileInputStream FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream input = new BufferedInputStream(file); // Reads first byte from file int i = input .read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the file i = input.read(); ) input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Produzione

 Questa è una riga di testo all'interno del file. 

Nell'esempio precedente, abbiamo creato un flusso di input bufferizzato denominato buffer insieme a FileInputStream. Il flusso di input è collegato al file input.txt .

 FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file); 

Qui abbiamo utilizzato il read()metodo per leggere un array di byte dal buffer interno del lettore bufferizzato.

disponibile () Metodo

Per ottenere il numero di byte disponibili nel flusso di input, possiamo utilizzare il available()metodo. Per esempio,

 import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + buffer.available()); // Reads bytes from the file buffer.read(); buffer.read(); buffer.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + buffer.available()); buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Produzione

 Byte disponibili all'inizio: 39 Byte disponibili alla fine: 36 

Nell'esempio sopra,

  1. Per prima cosa usiamo il available()metodo per controllare il numero di byte disponibili nel flusso di input.
  2. Quindi, abbiamo utilizzato il read()metodo 3 volte per leggere 3 byte dal flusso di input.
  3. Ora, dopo aver letto i byte, abbiamo nuovamente controllato i byte disponibili. Questa volta i byte disponibili sono diminuiti di 3.

metodo skip ()

Per scartare e saltare il numero di byte specificato, possiamo usare il skip()metodo. Per esempio,

 import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Skips the 5 bytes buffer.skip(5); System.out.println("Input stream after skipping 5 bytes:"); // Reads the first byte from input stream int i = buffer.read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the input stream i = buffer.read(); ) // Closes the input stream buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Produzione

 Flusso di input dopo aver saltato 5 byte: è una riga di testo all'interno del file. 

Nell'esempio precedente, abbiamo utilizzato il skip()metodo per saltare 5 byte dal flusso di input del file. Quindi, i byte 'T', 'h', 'i', 's'e ' 'vengono saltati dal flusso di input.

metodo close ()

Per chiudere il flusso di input bufferizzato, possiamo usare il close()metodo. Una volta close()chiamato il metodo, non possiamo usare il flusso di input per leggere i dati.

Altri metodi di BufferedInputStream

Metodi Descrizioni
mark() segnare la posizione nel flusso di input fino alla quale i dati sono stati letti
reset() restituisce il controllo al punto del flusso di input in cui è stato impostato il contrassegno

Per saperne di più, visita Java BufferdInputStream (documentazione Java ufficiale).

Articoli interessanti...