In diesem Tutorial lernen wir anhand von Beispielen Java BufferedInputStream und seine Methoden kennen.
Die BufferedInputStream
Klasse des java.io
Pakets wird mit anderen Eingabestreams verwendet, um die Daten (in Bytes) effizienter zu lesen.
Es erweitert die InputStream
abstrakte Klasse.
Funktionieren von BufferedInputStream
Der BufferedInputStream
verwaltet einen internen Puffer von 8192 Bytes .
Während BufferedInputStream
des Lesevorgangs wird ein Teil der Bytes von der Festplatte gelesen und im internen Puffer gespeichert. Und aus dem internen Puffer werden Bytes einzeln gelesen.
Daher wird die Anzahl der Kommunikation mit der Platte reduziert. Aus diesem Grund ist das Lesen von Bytes mit dem schneller BufferedInputStream
.
Erstellen Sie einen BufferedInputStream
Um ein zu erstellen BufferedInputStream
, müssen wir java.io.BufferedInputStream
zuerst das Paket importieren . Sobald wir das Paket hier importiert haben, können wir den Eingabestream erstellen.
// Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file);
Im obigen Beispiel haben wir einen BufferdInputStream
benannten Puffer mit der FileInputStream
benannten Datei erstellt.
Hier hat der interne Puffer die Standardgröße von 8192 Bytes. Wir können jedoch auch die Größe des internen Puffers angeben.
// Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size);
Der Puffer hilft dabei, Bytes aus den Dateien schneller zu lesen.
Methoden von BufferedInputStream
Die BufferedInputStream
Klasse bietet Implementierungen für verschiedene in der InputStream
Klasse vorhandene Methoden .
read () Methode
read()
- liest ein einzelnes Byte aus dem Eingabestreamread(byte() arr)
- liest Bytes aus dem Stream und speichert sie im angegebenen Arrayread(byte() arr, int start, int length)
- liest die Anzahl der Bytes, die der Länge des Streams entsprechen, und speichert sie ab dem Positionsstart im angegebenen Array
Angenommen, wir haben eine Datei mit dem Namen input.txt mit dem folgenden Inhalt.
This is a line of text inside the file.
Versuchen wir, die Datei mit zu lesen 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(); ) ) )
Ausgabe
Dies ist eine Textzeile in der Datei.
Im obigen Beispiel haben wir einen gepufferten Eingabestream mit dem Namen buffer zusammen mit erstellt FileInputStream
. Der Eingabestream ist mit der Datei input.txt verknüpft .
FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file);
Hier haben wir die read()
Methode verwendet, um ein Array von Bytes aus dem internen Puffer des gepufferten Lesegeräts zu lesen.
verfügbare () Methode
Um die Anzahl der verfügbaren Bytes im Eingabestream zu ermitteln, können wir die available()
Methode verwenden. Beispielsweise,
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(); ) ) )
Ausgabe
Verfügbare Bytes am Anfang: 39 Verfügbare Bytes am Ende: 36
Im obigen Beispiel ist
- Wir verwenden zuerst die
available()
Methode, um die Anzahl der verfügbaren Bytes im Eingabestream zu überprüfen. - Dann haben wir die
read()
Methode dreimal verwendet, um 3 Bytes aus dem Eingabestream zu lesen. - Nachdem wir die Bytes gelesen haben, haben wir die verfügbaren Bytes erneut überprüft. Diesmal verringerten sich die verfügbaren Bytes um 3.
skip () Methode
Um die angegebene Anzahl von Bytes zu verwerfen und zu überspringen, können wir die skip()
Methode verwenden. Beispielsweise,
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(); ) ) )
Ausgabe
Eingabestream nach dem Überspringen von 5 Bytes: ist eine Textzeile in der Datei.
Im obigen Beispiel haben wir die skip()
Methode verwendet, um 5 Bytes aus dem Dateieingabestream zu überspringen. Somit werden die Bytes 'T'
, 'h'
, 'i'
, 's'
und ' '
werden aus dem Eingabestrom übersprungen.
close () Methode
Um den gepufferten Eingabestream zu schließen, können wir die close()
Methode verwenden. Sobald die close()
Methode aufgerufen wurde, können wir den Eingabestream nicht mehr zum Lesen der Daten verwenden.
Andere Methoden von BufferedInputStream
Methoden | Beschreibungen |
---|---|
mark() | Markieren Sie die Position im Eingabestream, bis zu der Daten gelesen wurden |
reset() | Bringt das Steuerelement an den Punkt im Eingabestream zurück, an dem die Markierung gesetzt wurde |
Weitere Informationen finden Sie unter Java BufferdInputStream (offizielle Java-Dokumentation).