Java BufferedInputStream: Efficiënt byte-lezen en geavanceerde methoden
Java BufferedInputStream-klasse overzicht
Deze tutorial behandelt de Java BufferedInputStream-klasse, de kernmethoden en praktische voorbeelden om bestands-I/O-prestaties te verbeteren.
De BufferedInputStream-klasse in het java.io-pakket verbetert byte-level input streams door een interne buffer toe te voegen, wat snellere en efficiëntere datalezing mogelijk maakt.
Het breidt de abstracte InputStream-klasse uit.
Hoe BufferedInputStream werkt
BufferedInputStream onderhoudt een interne buffer van 8.192 bytes standaard. Wanneer een leesoperatie wordt aangevraagd, wordt een blok bytes van de onderliggende stream (meestal een bestand) opgehaald en in deze buffer opgeslagen. Volgende leesoproepen consumeren dan bytes uit de buffer tot deze leeg is, waarna een nieuw blok geladen wordt. Dit vermindert dure schijf-I/O en versnelt dataconsumptie.
Een BufferedInputStream aanmaken
Om een BufferedInputStream aan te maken, importeer eerst de klasse:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
Instantieer het vervolgens door een lager-niveau stream zoals FileInputStream te wrappen:
FileInputStream bestand = new FileInputStream("voorbeeld.txt");
BufferedInputStream buffer = new BufferedInputStream(bestand);
Optioneel kun je een aangepaste buffergrootte opgeven:
int bufferGrootte = 16_384; // 16 KB
BufferedInputStream buffer = new BufferedInputStream(bestand, bufferGrootte);
Ho groter de buffer, hoe minder schijftoegang nodig is – nuttig voor grote bestanden of netwerkstreams.
Kernmethoden van BufferedInputStream
read()
int read()– leest een enkele byte en retourneert deze als integer (0–255) of-1als het einde van de stream bereikt isint read(byte[] b)– leest maximaalb.lengthbytes in de arrayint read(byte[] b, int off, int len)– leest maximaallenbytes inbbeginnend bij offsetoff
Voorbeeld: Een tekstbestand byte-voor-byte lezen en naar de console printen.
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 byteGelezen;
while ((byteGelezen = in.read()) != -1) {
System.out.print((char) byteGelezen);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output:
Dit is een regel tekst in het bestand.
available()
De available()-methode rapporteert het aantal bytes dat van de stream gelezen kan worden zonder te blokkeren. Dit kan helpen de voortgang te beoordelen bij het verwerken van grote streams.
skip(long n)
Gebruik skip() om een gespecificeerd aantal bytes over te slaan. Het retourneert het daadwerkelijke aantal overgeslagen bytes, wat minder kan zijn dan gevraagd als het einde van de stream bereikt is.
close()
Sluit de stream altijd (bij voorkeur met een try-with-resources-blok) om systeembronnen vrij te geven. Na sluiten kan de stream niet hergebruikt worden.
Overige opvallende methoden
| Methode | Beschrijving |
|---|---|
mark(int readLimit) | Markeert de huidige positie in de stream. Volgende aanroepen naar reset() keeren terug naar dit punt, mits niet meer dan readLimit bytes gelezen zijn. |
reset() | Herpositioneert de stream naar de laatste gemarkeerde positie. |
Voor een complete referentie, raadpleeg de officiële Java-documentatie.
Java
- Java's final-sleutelwoord begrijpen: variabelen, methoden en klassen
- Java instanceof operator: een uitgebreide gids
- Java-erfenis meesteren: concepten, typen en praktische voorbeelden
- Java geneste static classes begrijpen: gebruik, verschillen en voorbeelden
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Singleton patroon uitgelegd: hoe veilig te implementeren en gebruiken
- Java Reflectie meesteren: klassen, methoden en velden inspecteren tijdens runtime
- Java ObjectOutputStream: Serialisatie, methoden en praktische voorbeelden
- Java BufferedReader: Efficiënte karakter-stream-afhandeling
- Java Generics: Herbruikbare, type-veilige code bouwen
- Java-bestandsbewerkingen onder de knie krijgen met java.io – Aanmaken, lezen, schrijven en verwijderen