In questo tutorial, impareremo a conoscere Java BufferedInputStream e i suoi metodi con l'aiuto di esempi.
La BufferedInputStream
classe del java.io
pacchetto viene utilizzata con altri flussi di input per leggere i dati (in byte) in modo più efficiente.
Estende la InputStream
classe astratta.
Funzionamento di BufferedInputStream
Il BufferedInputStream
mantiene 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.BufferedInputStream
prima 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 BufferdInputStream
buffer denominato con il FileInputStream
file 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 BufferedInputStream
classe fornisce implementazioni per diversi metodi presenti nella InputStream
classe.
metodo read ()
read()
- legge un singolo byte dal flusso di inputread(byte() arr)
- legge i byte dal flusso e li memorizza nell'array specificatoread(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,
- Per prima cosa usiamo il
available()
metodo per controllare il numero di byte disponibili nel flusso di input. - Quindi, abbiamo utilizzato il
read()
metodo 3 volte per leggere 3 byte dal flusso di input. - 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).