Java BufferedOutputStream: Efficiënt byte-schrijven uitgelegd
Java BufferedOutputStream: Efficiënt byte-schrijven uitgelegd
Beheers de BufferedOutputStream-klasse – het ontwerp, gebruik en kernmethoden – door duidelijke uitleg en praktische code-snippets.
De BufferedOutputStream-klasse, onderdeel van het java.io-pakket, wrapt een andere OutputStream om byte-level output te versnellen. Door data in het geheugen te bufferen, vermindert het het aantal schrijfoperaties naar het onderliggende apparaat, wat de prestaties aanzienlijk kan verbeteren, vooral voor grote bestanden.
Het erft van de abstracte OutputStream-klasse en biedt concrete implementaties voor de methoden.
Hoe BufferedOutputStream werkt
De stream allokeert intern een 8 KiB (8.192 bytes) buffer standaard. Wanneer write() wordt aangeroepen, worden bytes eerst in deze buffer opgeslagen. Alleen wanneer de buffer vol is, of wanneer flush() of close() wordt aangeroepen, worden de data naar de onderliggende stream geflusht.
Omdat schijf-I/O duur is, vermindert deze bufferstrategie round-trips en maakt byte-schrijven aanzienlijk sneller.
Een BufferedOutputStream aanmaken
Importeer de klasse en wrap dan elke OutputStream, meestal een FileOutputStream:
FileOutputStream bestand = new FileOutputStream("output.txt");
BufferedOutputStream buffer = new BufferedOutputStream(bestand);
Om de buffergrootte te controleren, geef een tweede argument mee:
BufferedOutputStream buffer = new BufferedOutputStream(bestand, 16384); // 16 KiB buffer
Een grotere buffer kan nuttig zijn voor heel grote schrijfacties, maar de standaard 8 KiB werkt goed voor de meeste scenario's.
Kernmethoden van BufferedOutputStream
De klasse implementeert de volledige set OutputStream-methoden met bufferondersteuning.
write()
write(int b)– voegt een enkele byte toe aan de bufferwrite(byte[] b)– schrijft een volledige byte-arraywrite(byte[] b, int off, int len)– schrijftlenbytes beginnend bij offsetoff
Voorbeeld: Tekst naar een bestand schrijven
import java.io.*;
public class Main {
public static void main(String[] args) {
String data = "Dit is een regel tekst in het bestand";
try (FileOutputStream fos = new FileOutputStream("output.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
bos.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Dit programma creëert output.txt met de inhoud:
Dit is een regel tekst in het bestand
Let op: String.getBytes() converteert de string naar een byte-array met het platformstandaard-charset. Voor deterministische resultaten, specificeer een charset, bijv. data.getBytes(StandardCharsets.UTF_8).
flush()
Dwingt gebufferde data om direct naar de onderliggende stream geschreven te worden. Dit is nuttig wanneer je moet garanderen dat data persistent is voordat je de stream sluit of naar een netwerksocket schrijft.
close()
Sluit de stream, flusht eventuele overgebleven data en geeft systeembronnen vrij. Na close() kan de stream niet meer gebruikt worden.
Voor een complete referentie, raadpleeg de officiële Java-documentatie: BufferedOutputStream API.
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 ArrayList meesteren: operaties, methoden en best practices
- Java ObjectOutputStream: Serialisatie, methoden en praktische voorbeelden
- Java Generics: Herbruikbare, type-veilige code bouwen
- Java-bestandsbewerkingen onder de knie krijgen met java.io – Aanmaken, lezen, schrijven en verwijderen