Java BufferedInputStream meistern: Effizientes Byte-Lesen & erweiterte Methoden
Java BufferedInputStream Klassenübersicht
Dieses Tutorial deckt die Java BufferedInputStream Klasse, ihre Schlüsselmethoden und praktische Beispiele ab, um Datei-I/O-Performance zu verbessern.
Die BufferedInputStream Klasse im java.io Paket erweitert byte-basierte Eingabestreams um einen internen Puffer, was schnelleres und effizienteres Datenlesen ermöglicht.
Sie erweitert die abstrakte InputStream Klasse.
Wie BufferedInputStream funktioniert
BufferedInputStream verwaltet standardmäßig einen internen Puffer von 8.192 Bytes. Wenn eine Leseoperation angefordert wird, wird ein Block Bytes vom zugrundeliegenden Stream (typischerweise eine Datei) geholt und in diesem Puffer gespeichert. Nachfolgende Leseaufrufe verbrauchen dann Bytes aus dem Puffer, bis dieser erschöpft ist, woraufhin ein weiterer Block geladen wird. Dies reduziert kostspielige Festplatten-I/O und beschleunigt den Datenverbrauch.
BufferedInputStream erstellen
Um einen BufferedInputStream zu erstellen, importieren Sie zuerst die Klasse:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
Instanziieren Sie ihn dann, indem Sie einen niedrigeren Stream wie FileInputStream wrappen:
FileInputStream file = new FileInputStream("beispiel.txt");
BufferedInputStream buffer = new BufferedInputStream(file);
Optional können Sie eine benutzerdefinierte Puffergröße angeben:
int bufferSize = 16_384; // 16 KB
BufferedInputStream buffer = new BufferedInputStream(file, bufferSize);
Je größer der Puffer, desto weniger Festplattenzugriffe sind erforderlich – nützlich für große Dateien oder Netzwerkstreams.
Wichtige Methoden von BufferedInputStream
read()
int read()– liest ein einzelnes Byte und gibt es als Integer (0–255) oder-1zurück, wenn das Ende des Streams erreicht ist.int read(byte[] b)– liest bis zub.lengthBytes in das Array.int read(byte[] b, int off, int len)– liest bis zulenBytes inbab Offsetoff.
Beispiel: Textdatei Byte für Byte lesen und auf der Konsole ausgeben.
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class Main {
public static void main(String[] args) {
try (BufferedInputStream in = new BufferedInputStream(new FileInputStream("input.txt"))) {
int byteRead;
while ((byteRead = in.read()) != -1) {
System.out.print((char) byteRead);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ausgabe:
This is a line of text inside the file.
available()
Die available() Methode meldet die Anzahl der Bytes, die aus dem Stream gelesen werden können, ohne zu blockieren. Dies kann helfen, den Fortschritt bei der Verarbeitung großer Streams einzuschätzen.
FileInputStream file = new FileInputStream("input.txt");
BufferedInputStream buffer = new BufferedInputStream(file);
System.out.println("Verfügbare Bytes: " + buffer.available());
// ... Daten lesen
System.out.println("Verbleibende Bytes: " + buffer.available());
buffer.close();
skip(long n)
Verwenden Sie skip(), um eine angegebene Anzahl Bytes zu überspringen. Sie gibt die tatsächlich übersprungenen Bytes zurück, was weniger als angefordert sein kann, wenn das Stream-Ende erreicht wird.
buffer.skip(5); // erste 5 Bytes überspringen
close()
Schließen Sie den Stream immer (bevorzugt mit try-with-resources Block), um Systemressourcen freizugeben. Nach dem Schließen kann der Stream nicht wiederverwendet werden.
Weitere bemerkenswerte Methoden
| Methode | Beschreibung |
|---|---|
mark(int readLimit) | Markiert die aktuelle Position im Stream. Nachfolgende Aufrufe von reset() kehren zu diesem Punkt zurück, sofern nicht mehr als readLimit Bytes gelesen wurden. |
reset() | Positioniert den Stream auf die letzte markierte Position. |
Für eine vollständige Referenz konsultieren Sie die offizielle Java-Dokumentation.
Java
- Javas final-Schlüsselwort verstehen: Variablen, Methoden und Klassen
- Java instanceof-Operator: Ein umfassender Leitfaden
- Java statische verschachtelte Klassen verstehen: Nutzung, Unterschiede und Beispiele
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Singleton-Pattern erklärt: Sichere Implementierung und Verwendung
- Java Reflection meistern: Klassen, Methoden und Felder zur Laufzeit inspizieren
- Java ObjectOutputStream meistern: Serialisierung, Methoden und praktische Beispiele
- Java BufferedReader meistern: Effizientes Character-Stream-Handling
- Java Generics meistern – Wiederverwendbaren, typsicheren Code erstellen
- Java-Dateioperationen mit java.io meistern – Erstellen, Lesen, Schreiben & Löschen