Java NIO - Buffer
Buffer di Java NIO dapat diperlakukan sebagai objek sederhana yang bertindak sebagai wadah potongan data berukuran tetap yang dapat digunakan untuk menulis data ke saluran atau membaca data dari saluran sehingga buffer bertindak sebagai titik akhir ke saluran.
Ini menyediakan serangkaian metode yang membuat lebih nyaman untuk menangani blok memori untuk membaca dan menulis data ke dan dari saluran.
Buffer membuat paket NIO lebih efisien dan lebih cepat dibandingkan dengan IO klasik seperti dalam kasus data IO ditangani dalam bentuk aliran yang tidak mendukung aliran data yang tidak sinkron dan bersamaan. Juga IO tidak mengizinkan eksekusi data dalam potongan atau kumpulan byte .
Parameter utama yang mendefinisikan buffer Java NIO dapat didefinisikan sebagai -
Capacity - Jumlah maksimum data / byte yang dapat disimpan di Buffer. Kapasitas buffer tidak dapat diubah. Setelah buffer penuh, buffer harus dihapus sebelum menuliskannya.
Limit - Limit memiliki arti sesuai dengan mode Buffer yaitu pada mode tulis Buffer Limit adalah sama dengan kapasitas yang berarti data maksimum yang dapat ditulisi dalam buffer, sedangkan pada mode baca buffer Limit berarti batasan berapa banyak data yang dapat ditampung. baca dari Buffer.
Position - Menunjuk lokasi kursor saat ini di buffer. Awalnya ditetapkan sebagai 0 pada saat pembuatan buffer atau dengan kata lain itu adalah indeks elemen berikutnya yang akan dibaca atau ditulis yang diperbarui secara otomatis oleh get () dan put ( ) metode.
Mark - Tandai penanda posisi dalam buffer. Ketika metode mark () dipanggil, posisi saat ini direkam dan ketika reset () disebut posisi yang ditandai dikembalikan.
Jenis Penyangga
Buffer Java NIO dapat diklasifikasikan dalam varian berikut berdasarkan tipe data yang ditangani buffer -
- ByteBuffer
- MappedByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
Metode penting Buffer
Seperti yang telah disebutkan bahwa Buffer bertindak sebagai objek memori yang menyediakan sekumpulan metode yang membuat lebih nyaman untuk menangani blok memori. Berikut adalah metode penting Buffer -
allocate(int capacity) - Metode ini digunakan untuk mengalokasikan buffer baru dengan kapasitas sebagai parameter. Metode alokasi melempar IllegalArgumentException jika kapasitas yang diteruskan adalah bilangan bulat negatif.
read() and put() - Metode read channel digunakan untuk menulis data dari channel ke buffer sedangkan put adalah metode buffer yang digunakan untuk menulis data dalam buffer.
flip() - Metode flip mengubah mode Buffer dari menulis ke mode membaca, juga mengatur posisi kembali ke 0, dan menetapkan batas ke posisi saat penulisan.
write() and get() - metode tulis saluran digunakan untuk menulis data dari buffer ke saluran sedangkan get adalah metode buffer yang digunakan untuk membaca data dari buffer.
rewind() - Metode rewind digunakan ketika membaca ulang diperlukan karena ini mengatur posisi kembali ke nol dan tidak mengubah nilai batas.
clear() and compact() - Jelas dan kompak kedua metode digunakan untuk membuat buffer dari mode baca ke tulis.clear() metode membuat posisi ke nol dan batas sama dengan kapasitas, dalam metode ini data dalam buffer tidak dihapus hanya penanda yang diinisialisasi ulang.
Di sisi lain compact() Metode digunakan ketika masih ada beberapa data yang belum dibaca dan masih kita menggunakan mode tulis buffer dalam hal ini metode kompak menyalin semua data yang belum dibaca ke awal buffer dan mengatur posisi ke kanan setelah elemen terakhir yang belum dibaca. diatur ke kapasitas.
mark() and reset() - Seperti nama yang disarankan, metode tanda digunakan untuk menandai posisi tertentu dalam buffer sementara reset membuat posisi kembali ke posisi yang ditandai.
Contoh
Contoh berikut menunjukkan implementasi metode yang ditentukan di atas.
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
public class BufferDemo {
public static void main (String [] args) {
//allocate a character type buffer.
CharBuffer buffer = CharBuffer.allocate(10);
String text = "bufferDemo";
System.out.println("Input text: " + text);
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
//put character in buffer.
buffer.put(c);
}
int buffPos = buffer.position();
System.out.println("Position after data is written into buffer: " + buffPos);
buffer.flip();
System.out.println("Reading buffer contents:");
while (buffer.hasRemaining()) {
System.out.println(buffer.get());
}
//set the position of buffer to 5.
buffer.position(5);
//sets this buffer's mark at its position
buffer.mark();
//try to change the position
buffer.position(6);
//calling reset method to restore to the position we marked.
//reset() raise InvalidMarkException if either the new position is less
//than the position marked or merk has not been setted.
buffer.reset();
System.out.println("Restored buffer position : " + buffer.position());
}
}
Keluaran
Input text: bufferDemo
Position after data is written into buffer: 10
Reading buffer contents:
b
u
f
f
e
r
D
e
m
o
Restored buffer position : 5