Java programlama alanında, Java NIO (Yeni Giriş/Çıkış) paketi, özellikle yüksek eşzamanlılık ve engellemesiz G/Ç'nin gerekli olduğu senaryolarda, G/Ç işlemlerini gerçekleştirmenin güçlü ve etkili bir yolunu sunar. Java NIO'nun temel bileşenlerinden biriSeçici, tek bir iş parçacığının birden fazla kanalı yönetmesine olanak tanır. Bu blogda, bir NIO tedarikçisi olarak, Java NIO Selector'dan hazır setin nasıl alınacağını araştıracağım.
Java NIO Seçiciyi Anlamak
Hazır setin nasıl elde edileceğini tartışmadan önce, ne anlama geldiğini anlamak önemlidir.Seçiciöyle. ASeçiciJava'da NIO, birden fazla öğeyi izlemek için kullanılabilen bir nesnedirSeçilebilir Kanalokuma, yazma, bağlanma ve kabul etme gibi çeşitli G/Ç olayları için nesneler. Tek bir iş parçacığının birden fazla kanalı yönetmesine olanak tanıyarak uygulamanın verimliliğini önemli ölçüde artırır.
Bir kullanmak içinSeçiciönce bir tane oluşturmamız gerekiyor. İşte oluşturmak için basit bir kod pasajıSeçici:
java.nio.channels.Selector'ı içe aktarın; Java.io.IOException'ı içe aktarın; public class SelectorExample { public static void main(String[] args) { try { Selector selector = Selector.open(); System.out.println("Seçici açıldı: " + seçici); } catch (IOException e) { e.printStackTrace(); } } }
Bu kodda şunu kullanıyoruz:açık()yöntemiSeçiciyeni bir sınıf oluşturmak için sınıfSeçicimisal.
Kanalları Seçiciye Kaydetme
Bir kez sahip olduğumuzdaSeçicibir veya daha fazlasını kaydetmemiz gerekiyorSeçilebilir Kanalonunla birlikte nesneler. Bir kanalı kaydettiğimizdeSeçici, ilgilendiğimiz etkinlik türlerini belirtiriz. Dört tür etkinlik vardır:SeçimKey.OP_READ,SeçimKey.OP_WRITE,SeçimKey.OP_CONNECT, VeSeçimKey.OP_ACCEPT.
İşte bir kayıt örneğiSoket Kanalıbir ileSeçiciokuma etkinlikleri için:
Java.nio.channels.SocketChannel'ı içe aktarın; java.nio.channels.Selector'ı içe aktarın; Java.io.IOException'ı içe aktarın; Java.net.InetSocketAddress'i içe aktarın; public class ChannelRegistration { public static void main(String[] args) { try { Selector selector = Selector.open(); SocketChannel soketChannel = SocketChannel.open(); soketChannel.configureBlocking(false); soketChannel.connect(new InetSocketAddress("example.com", 80)); soketChannel.register(seçici, SelectionKey.OP_CONNECT); } catch (IOException e) { e.printStackTrace(); } } }
Bu kodda öncelikle bir tane oluşturuyoruz.Soket Kanalıve engellemeyecek şekilde yapılandırın. Daha sonra uzak bir sunucuya bağlayıp kayıt ediyoruz.SeçiciiçinOP_CONNECTetkinlik.


Hazır Setin Alınması
Hazır bir setSeçiciiçerirSeçimAnahtarıG/Ç işlemlerine hazır nesneler. Hazır seti almak için öncelikle çağrı merkezini aramamız gerekiyor.seçme()yöntemiSeçici.seçme()kayıtlı kanallardan en az biri bir G/Ç işlemi için hazır olana kadar yöntem bloke eder.
Hazır seti şu şekilde elde edebiliriz:
java.nio.channels.Selector'ı içe aktarın; Java.nio.channels.SocketChannel'ı içe aktarın; Java.io.IOException'ı içe aktarın; Java.net.InetSocketAddress'i içe aktarın; java.nio.channels.SelectionKey'i içe aktarın; Java.util.Iterator'ı içe aktarın; public class GetReadySet { public static void main(String[] args) { try { Selector selector = Selector.open(); SocketChannel soketChannel = SocketChannel.open(); soketChannel.configureBlocking(false); soketChannel.connect(new InetSocketAddress("example.com", 80)); soketChannel.register(seçici, SelectionKey.OP_CONNECT); while (true) { int hazır Kanallar = selector.select(); if (readyChannels == 0) devam et; Iterator<SelectionKey> keyIterator = selector.selectedKeys().iterator(); while (keyIterator.hasNext()) { SelectionKey anahtarı = keyIterator.next(); if (key.isConnectable()) { // Bağlantı olayını işle } else if (key.isReadable()) { // Okuma olayını işle } else if (key.isWritable()) { // Yazma olayını işle } keyIterator.remove(); } } } catch (IOException e) { e.printStackTrace(); } } }
Bu kodda şunu çağırıyoruz:seçme()Bir döngüdeki yöntem. En az bir kanal hazırsa, seçili tuşlar üzerinde aşağıdakileri kullanarak bir yineleyici elde ederiz:seçilen Tuşlar()yöntemiSeçici. Daha sonra anahtarlar üzerinde yineliyoruz ve her bir anahtar için olay türünü kontrol ediyoruz. Bir anahtarı işledikten sonra, tekrar işlenmesini önlemek için onu yineleyiciden çıkarırız.
Pratik Hususlar
Hazır bir setle çalışırkenSeçici, birkaç pratik husus vardır.
Anahtar Kaldırma
Önceki örnekte gösterildiği gibi, kaldırılması çok önemlidir.SeçimAnahtarıişledikten sonra yineleyiciden. Eğer onu kaldırmazsak, döngünün bir sonraki yinelemesinde aynı anahtar tekrar işlenecek ve bu da yanlış davranışa yol açacaktır.
Hata İşleme
G/Ç olaylarını işlerken hataları doğru şekilde ele almamız gerekir. Örneğin bir kanal okuma veya yazma işlemi sırasında hatayla karşılaşırsa kanalı kapatıp hatasını kaldırmalıyız.SeçimAnahtarıitibarenSeçici.
Performans Ayarlama
seçme()yöntem bazı durumlarda performans darboğazı olabilir. Şunu kullanabiliriz:Şimdi seç()engellemeyen yöntem veyaseç (uzun zaman aşımı)Performansı optimize etmek için belirli bir süre boyunca bloke eden yöntem.
NIO Tedarikçisi Olarak Teklifimiz
Bir NIO tedarikçisi olarak modern uygulamalarda verimli I/O yönetiminin önemini anlıyoruz. Optimize edilmiş kod kitaplıkları, danışmanlık hizmetleri ve eğitim programları da dahil olmak üzere Java NIO ile ilgili bir dizi çözüm sunuyoruz. İster yüksek performanslı bir ağ sunucusu ister veri yoğun bir uygulama geliştiriyor olun, uzmanlığımız Java NIO'nun gücünden sonuna kadar yararlanmanıza yardımcı olabilir.
Ürünlerimiz ve hizmetlerimizle, özellikle de Java NIO Selectors'tan en iyi şekilde yararlanmayla ilgileniyorsanız, sizi şuraya davet ediyoruz:bir satın alma görüşmesi için bizimle iletişime geçin. Size özel ihtiyaçlarınıza göre uyarlanmış en iyi çözümleri sunmaya kararlıyız.
Çözüm
Java NIO Selector'dan hazır seti almak, Java NIO programlamasında temel bir işlemdir. Nasıl yaratılacağını anlayarakSeçici, kanalları ona kaydedin ve hazır seti edinin; yüksek performanslı, engellenmeyen I/O uygulamaları oluşturabilirsiniz. Bir NIO tedarikçisi olarak, Java NIO'yu etkili bir şekilde kullanma yolculuğunuzda size destek olmak için buradayız. Elektrikli otomobiller ve ileri teknolojileri hakkında daha fazla bilgi edinmek istiyorsanız aşağıdaki yazıya göz atabilirsiniz.Nio ET5 Elektrikli Araba.
Referanslar
- Ron Hitchens'ın "Java NIO'su"
- NIO Paketine İlişkin Oracle Java Dokümantasyonu



























































