Java BufferedOutputStream: Penulisan Byte Efisien Dijelaskan
Java BufferedOutputStream: Efficient Byte Writing Explained
Mahir kelas BufferedOutputStream—desain, penggunaan, dan metode inti—melalui penjelasan yang jelas dan cuplikan kode praktis.
Kelas BufferedOutputStream, yang merupakan bagian dari paket java.io, membungkus OutputStream lain untuk mempercepat output tingkat byte. Dengan menampung data di memori, mengurangi jumlah operasi tulis ke perangkat dasar, yang dapat meningkatkan kinerja secara dramatis, terutama untuk file besar.
Ia mewarisi dari kelas abstrak OutputStream dan menyediakan implementasi konkret untuk metodenya.
Bagaimana BufferedOutputStream Bekerja
Aliran secara internal mengalokasikan buffer sebesar 8 KiB (8.192 byte) secara default. Saat write() dipanggil, byte disimpan di buffer ini terlebih dahulu. Hanya saat buffer penuh, atau saat flush() atau close() dipanggil, data yang dikosongkan ke aliran dasar.
Karena I/O disk mahal, strategi buffering ini mengurangi perjalanan pulang-pergi dan membuat penulisan byte jauh lebih cepat.
Membuat BufferedOutputStream
Impor kelas dan bungkus OutputStream apa pun, biasanya FileOutputStream:
FileOutputStream file = new FileOutputStream("output.txt"); BufferedOutputStream buffer = new BufferedOutputStream(file);
Untuk mengontrol ukuran buffer, berikan argumen kedua:
BufferedOutputStream buffer = new BufferedOutputStream(file, 16384); // 16 KiB buffer
Memilih buffer yang lebih besar dapat bermanfaat untuk tulisan yang sangat besar, tetapi default 8 KiB berfungsi baik untuk sebagian besar skenario.
Metode Utama BufferedOutputStream
Kelas ini mengimplementasikan seluruh sekelompok metode OutputStream dengan dukungan buffering.
write()
write(int b) – Menambahkan satu byte ke buffer. write(byte[] b) – Menulis seluruh array byte. write(byte[] b, int off, int len) – Menulis len byte mulai dari offset off.
Contoh: Menulis Teks ke File
import java.io.*; public class Main { public static void main(String[] args) { String data = "This is a line of text inside the file"; try (FileOutputStream fos = new FileOutputStream("output.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos)) { bos.write(data.getBytes()); } catch (IOException e) { e.printStackTrace(); } } }
Menjalankan program ini membuat output.txt yang berisi:
This is a line of text inside the file
Catatan: String.getBytes() mengonversi string menjadi array byte menggunakan charset default platform. Untuk hasil yang pasti, tentukan charset, misalnya data.getBytes(StandardCharsets.UTF_8).
flush()
Memaksa data yang ditampung untuk ditulis ke aliran dasar segera. Berguna saat Anda perlu memastikan persisten data sebelum menutup aliran atau saat menulis ke soket jaringan.
BufferedOutputStream bos = new BufferedOutputStream(fos); bos.write(data.getBytes()); bos.flush(); // guarantees data is sent
close()
Menutup aliran, mengosongkan data yang tersisa, dan melepaskan sumber daya sistem. Setelah memanggil close(), aliran tidak dapat digunakan lagi.
Untuk referensi komprehensif, konsultasikan dokumentasi Java resmi: BufferedOutputStream API.