Menguasai Java BufferedInputStream: Pembacaan Byte Efisien dan Metode Lanjutan
Java BufferedInputStream Class Overview
Tutorial ini membahas kelas Java BufferedInputStream, metode utamanya, dan contoh praktis untuk meningkatkan kinerja I/O file.
Kelas BufferedInputStream dalam paket java.io meningkatkan aliran masukan tingkat byte dengan menambahkan buffer internal, memungkinkan pembacaan data yang lebih cepat dan efisien.
Ia memperluas kelas abstrak InputStream.
Bagaimana BufferedInputStream Bekerja
BufferedInputStream memelihara buffer internal sebesar 8.192 byte secara default. Saat operasi baca diminta, blok byte diambil dari aliran dasar (biasanya file) dan disimpan dalam buffer ini. Pemanggilan baca berikutnya kemudian mengonsumsi byte dari buffer hingga habis, titik di mana blok lain dimuat. Hal ini mengurangi I/O disk yang mahal dan mempercepat konsumsi data.
Membuat BufferedInputStream
Untuk membuat BufferedInputStream, impor kelas terlebih dahulu:
import java.io.BufferedInputStream; import java.io.FileInputStream;
Kemudian, buat instance dengan membungkus aliran tingkat rendah seperti FileInputStream:
FileInputStream file = new FileInputStream("example.txt"); BufferedInputStream buffer = new BufferedInputStream(file);
Secara opsional, tentukan ukuran buffer kustom:
int bufferSize = 16_384; // 16 KB BufferedInputStream buffer = new BufferedInputStream(file, bufferSize);
Semakin besar buffer, semakin sedikit akses disk yang diperlukan—berguna untuk file besar atau aliran jaringan.
Metode Utama BufferedInputStream
read()
int read() – membaca satu byte dan mengembalikannya sebagai integer (0–255) atau -1 jika akhir aliran tercapai. int read(byte[] b) – membaca hingga b.length byte ke dalam array. int read(byte[] b, int off, int len) – membaca hingga len byte ke dalam b mulai dari offset off.
Contoh: Membaca file teks byte demi byte dan mencetaknya ke konsol.
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(); } } }
Output:
This is a line of text inside the file.
available()
Metode available() melaporkan jumlah byte yang dapat dibaca dari aliran tanpa pemblokiran. Ini dapat membantu mengukur progres saat memproses aliran besar.
FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file); System.out.println("Bytes available: " + buffer.available()); // ... read data System.out.println("Bytes remaining: " + buffer.available()); buffer.close();
skip(long n)
Gunakan skip() untuk melewati sejumlah byte tertentu. Mengembalikan jumlah byte yang sebenarnya dilewati, yang mungkin lebih sedikit dari yang diminta jika akhir aliran tercapai.
buffer.skip(5); // skip first 5 bytes
close()
Selalu tutup aliran (secara ideal menggunakan blok try-with-resources) untuk melepaskan sumber daya sistem. Setelah ditutup, aliran tidak dapat digunakan lagi.
Metode Lainnya yang Perlu Diketahui
| Method | Description |
mark(int readLimit) | Menandai posisi saat ini dalam aliran. Pemanggilan berikutnya ke reset() akan kembali ke titik ini, asalkan tidak lebih dari readLimit byte telah dibaca. |
reset() | Mengubah posisi aliran ke posisi terakhir yang ditandai. |
Untuk referensi lengkap, konsultasikan dokumentasi Java resmi.