Hey! Sebagai pembekal dalam ruang NIO, saya telah melutut - jauh dalam dunia Java NIO Buffers. Jadi, mari kita selami apakah peranan kedudukan, had dan kapasiti dalam Java NIO Buffer.
Mula-mula, mari kita dapatkan sedikit konteks. Java NIO (I/O Baharu) ialah alternatif kepada API Java I/O standard. Ia menyediakan mekanisme I/O yang tidak menyekat, yang sangat berguna untuk aplikasi berprestasi tinggi. Dan di tengah-tengah Java NIO, kami mempunyai penimbal. Penampan pada asasnya ialah bekas untuk jumlah data yang tetap. Ia seperti tangki simpanan di mana anda boleh mencurahkan dan mengeluarkan data mengikut keperluan.
Kapasiti
Kapasiti penimbal adalah sifat paling asasnya. Anda boleh menganggapnya sebagai saiz tangki. Apabila anda membuat penimbal, anda menentukan kapasitinya, dan itulah jumlah maksimum data yang boleh disimpan oleh penimbal. Ia ditetapkan apabila penimbal dibuat dan tidak boleh ditukar kemudian.
Sebagai contoh, jika anda mencipta ByteBuffer dengan kapasiti 1024 bait, itu adalah bilangan maksimum bait yang boleh disimpan. Begini cara anda melakukannya di Jawa:
import java.nio.ByteBuffer; Kelas awam BufferContoh { public static void main(String[] args) { ByteBuffer buffer = ByteBuffer.allocate(1024); System.out.println("Kapasiti penimbal: " + buffer.capacity()); } }
Dalam kod ini, kami memperuntukkan ByteBuffer dengan kapasiti 1024 bait. Kapasiti memberi kita had atas jumlah data yang boleh kita masukkan ke dalam penimbal. Ia telah ditetapkan, jadi sebaik sahaja anda mencipta penimbal, anda tidak boleh membuat keputusan untuk menjadikannya lebih besar (baik, bukan tanpa membuat penimbal baharu).
Kapasiti adalah sangat penting kerana ia membantu kita menguruskan ingatan. Jika kami tahu jumlah data yang mungkin kami kendalikan, kami boleh memperuntukkan penimbal bersaiz yang sesuai. Dengan cara ini, kami tidak membazir memori dengan mencipta penimbal yang terlalu besar, dan kami juga tidak menghadapi isu di mana penimbal terlalu kecil untuk menyimpan semua data kami.
kedudukan
Kedudukan penimbal adalah seperti penanda. Ia memberitahu kami di mana operasi baca atau tulis seterusnya akan berlaku. Apabila penimbal dibuat untuk kali pertama, kedudukan ditetapkan kepada 0. Ini bermakna apabila kita mula menulis data ke dalam penimbal, kita akan bermula pada permulaan.
Katakan kami sedang menulis data ke dalam ByteBuffer kami yang kami buat sebelum ini. Setiap kali kita menulis bait, kedudukan bergerak ke hadapan dengan satu bait. Contohnya:
import java.nio.ByteBuffer; Kelas awam BufferPositionContoh { public static void main(String[] args) { ByteBuffer buffer = ByteBuffer.allocate(1024); System.out.println("Kedudukan awal: " + buffer.position()); buffer.put((bait) 1); System.out.println("Kedudukan selepas satu tulis: " + buffer.position()); buffer.put((bait) 2); System.out.println("Kedudukan selepas dua tulisan: " + buffer.position()); } }
Dalam kod ini, kita dapat melihat bahawa kedudukan bermula pada 0. Selepas yang pertamameletakkanoperasi, kedudukan dinaikkan kepada 1, dan selepas yang keduameletakkanoperasi, ia meningkat kepada 2.
Apabila ia datang untuk membaca data daripada penimbal, kedudukan juga memainkan peranan penting. Sebelum kita mula membaca, kita biasanya perlu menyelak penimbal (lebih lanjut mengenainya kemudian). Apabila kita membaca data daripada penimbal, kedudukan sekali lagi bergerak ke hadapan setiap kali kita membaca bait. Ini memastikan kami membaca data dalam susunan yang betul.
had
Had adalah satu lagi konsep penting. Ia menandakan sempadan data yang tersedia untuk dibaca atau ditulis. Apabila penampan pertama kali dibuat, had ditetapkan kepada kapasiti penimbal. Ini bermakna kita boleh menulis sehingga kapasiti penuh penimbal.
Walau bagaimanapun, apabila kami selesai menulis data ke dalam penimbal dan kami mahu mula membacanya, kami perlu menukar had. Biasanya, kami menetapkan had kepada kedudukan semasa (kerana kedudukan memberitahu kami berapa banyak data yang sebenarnya kami tulis), dan kemudian kami menetapkan kedudukan kepada 0. Proses ini dipanggil "membalikkan" penimbal.
Berikut ialah contoh:
import java.nio.ByteBuffer; kelas awam BufferLimitExample { public static void main(String[] args) { ByteBuffer buffer = ByteBuffer.allocate(1024); System.out.println("Had awal: " + buffer.limit()); buffer.put((bait) 1); buffer.put((bait) 2); buffer.flip(); System.out.println("Had selepas flip: " + buffer.limit()); System.out.println("Kedudukan selepas flip: " + buffer.position()); } }
Dalam kod ini, kami mula-mula memperuntukkan penimbal. Had awal adalah sama dengan kapasiti. Kami kemudian menulis dua bait ke dalam penimbal. Selepas menelefonflip(), had ditetapkan kepada 2 (kerana itu kedudukan semasa, menunjukkan jumlah data yang telah kami tulis), dan kedudukan ditetapkan kepada 0, jadi kami boleh mula membaca dari permulaan data yang kami tulis.
Had ini membantu kami mengelak daripada membaca atau menulis melebihi data sebenar yang terdapat dalam penimbal. Ia memastikan bahawa kami hanya bekerja dengan data yang sah dalam penimbal.
Bagaimana Mereka Bekerja Bersama
Tiga sifat ini - kapasiti, kedudukan dan had - bekerjasama - dalam - tangan untuk mengurus data dalam penimbal. Kapasiti menetapkan saiz maksimum penimbal. Kedudukan menjejaki kedudukan kami dalam penimbal untuk operasi baca dan tulis, dan had menentukan sempadan data yang sah.
Apabila kami menulis data, kami bermula pada kedudukan (yang pada mulanya 0), dan kami boleh menulis sehingga had (yang pada mulanya sama dengan kapasiti). Semasa kita menulis, kedudukan bergerak ke hadapan. Apabila kami selesai menulis, kami membalikkan penimbal. Ini menetapkan had kepada kedudukan (untuk menandakan penghujung data bertulis) dan menetapkan semula kedudukan kepada 0. Kemudian, apabila kita membaca, kita bermula dari kedudukan (yang kini 0) dan boleh membaca sehingga had baharu.
Aplikasi Sebenar - Dunia
Dalam kerja kami sebagai pembekal NIO, memahami konsep ini adalah penting. Sebagai contoh, apabila berurusan dengan komunikasi rangkaian, kami sering menggunakan penimbal untuk menghantar dan menerima data. Kami perlu mengurus kapasiti, kedudukan dan had penimbal dengan berhati-hati untuk memastikan kami menghantar dan menerima jumlah data yang betul.
Jika anda ingin tahu tentang kenderaan yang berkaitan dengan jenama NIO, lihatKereta Elektrik Nio ET5. Ia merupakan contoh hebat inovasi dalam ekosistem NIO.


Membungkus
Kesimpulannya, kedudukan, had dan kapasiti dalam Java NIO Buffer adalah konsep asas. Mereka membenarkan kami mengurus data dengan cekap, mengelakkan pembaziran memori dan memastikan kami bekerja dengan jumlah data yang betul.
Jika anda berada dalam pasaran untuk produk berkaitan NIO atau ingin membincangkan pengurusan penimbal dalam konteks sistem NIO, kami sedia membantu. Sama ada untuk komunikasi rangkaian, pengendalian fail atau sebarang aplikasi berasaskan NIO yang lain, kami mempunyai kepakaran dan produk untuk memenuhi keperluan anda. Hubungi kami untuk perbincangan pembelian dan mari bekerjasama untuk membawa projek NIO anda ke peringkat seterusnya.
Rujukan
- Tutorial Java NIO daripada Dokumentasi Oracle
- "Jawa Berkesan" oleh Joshua Bloch



























































