Rumah Java javaTutorial 关于Nio具体工作过程示例代码

关于Nio具体工作过程示例代码

Jul 03, 2017 am 11:20 AM
Kerja Cara klasik

 1 public void selector() throws IOException { 2     
 ByteBuffer buffer = ByteBuffer.allocate(1024); 3     
 Selector selector = Selector.open(); 4     
 ServerSocketChannel ssc = ServerSocketChannel.open(); 5     
 ssc.configureBlocking(false);//设置为非阻塞模式 6     
 ssc.socket().bind(new InetSocketAddress(8080)); 7     
 ssc.register(selector, SelectionKey.OP_ACCEPT);//注册监听事件 8     
 while(true) { 9         Set selectorKeys = selector.selectorKeys();
 //取得所有key的集合10         Iterator it = selectorKeys.iterator();11         
 while(it.hasNext()) { //检查序列是否还有元素12             
 SelectionKey key = (SelectionKey) it.next();13             
 if((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) {14                 
 ServerSocketChannel ssChannel = (ServerSocketChannel) key.channel();15                 
 SocketChannel sc = ssChannel.accept();//接受到服务端的请求16                 
 sc.configureBlocking(false);17                 
 sc.register(selector,SelectionKey.OP_ACCEPT);18                 
 it.remove();19             } 
 else if((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {20                 
 SocketChannel sc = (SocketChannel) key.channel;21                 
 while(true) {22                     buffer.clear();23                     
 int n = sc.read(buffer);//读取数据24                     
 if(n <= 0) {25                         
 break;26                     }                     
 buffer.flip();28                 }                
 it.remove();30             }    
 }
 }
 }
Salin selepas log masuk

  上面这段代码是书上关于Nio具体工作过程的代码示例。其工作过程可以具体阐述如下:

其中有两个关键的类:Channel和Selector,它们是NIO中的核心概念。其中Channel可类比为交通工具,而且是具体的交通工具,例如:汽车,自行车。而Selector则可以类比为车辆调度系统,负责车辆运行状况的监视和具体调度工作。

serverSocketChannel类是针对面向流的侦听套接字的可选择通道,在服务端创建完此类实例后通过Socket()方法(获取与此通道关联的服务器套接字)返回一个ServerSocket类的实例,在利用此实例的void bind(SocketAddress endpoint)方法将 ServerSocket 绑定到特定地址(IP 地址和端口号)。就像出租车公司的每辆出租车都要在公司注册一样,我们也需要将ServerSocketChannel的实例通过register()方法将此通道注册到指定的选择器。

然后调用Selector的selectedKeys方法来检查已经注册在这个选择器上的所有通信信道是否有需要的事件发生,如果有某个事件发生,将会返回所有的SelectionKey,由于key.readyOps()获取此键的 ready 操作集合,所以个人认为key.readyOps()&SelectionKey.OP_ACCEPT意思是此键的 ready 操作集合为ACCEPT状态,即服务器处于监听状态,通过这个对象的Channel方法就可以取得这个通信信道对象,然后调用accept()方法返回一个套接字通道,默认为阻塞状态,也可以利用Channel方法取得的通信信道对象读取通信的数据,而这里读取的数据是Buffer,这个Buffer是我们可以控制的缓冲器。


Atas ialah kandungan terperinci 关于Nio具体工作过程示例代码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah pekerjaan yang boleh saya mohon pada tahun 2023 dengan kemahiran Java saya? Apakah pekerjaan yang boleh saya mohon pada tahun 2023 dengan kemahiran Java saya? Sep 21, 2023 am 11:41 AM

Apabila kita bercakap tentang bahasa pengaturcaraan dan pekerjaan, satu bahasa pengaturcaraan yang terlintas di fikiran kita ialah Java. Kebanyakan syarikat di seluruh dunia menggunakan Java. Ia popular dan terdapat banyak peluang pekerjaan. Jika anda ingin mendapatkan pekerjaan dengan bantuan kemahiran Java pada tahun 2023, maka ini bagus untuk anda kerana kemahiran Java boleh memberi anda pekerjaan dengan cepat. Selain itu, ia boleh memajukan kerjaya anda dengan cepat. Tiada silap mata yang akan membuatkan anda mencari pekerjaan dengan cepat. Tetapi kemahiran anda seperti sihir kepada anda. Pilih pekerjaan yang memuaskan hati anda dan persekitaran yang baik yang boleh meningkatkan kerjaya anda. Jika anda seorang pemula dan mempunyai pengalaman, Java juga memberikan anda pekerjaan yang baik. Banyak syarikat menggunakan Java sebagai program utama untuk pembangunan mereka. ia

Analisis tanggungjawab jurutera hadapan: Apakah tugas utama? Analisis tanggungjawab jurutera hadapan: Apakah tugas utama? Mar 25, 2024 pm 05:09 PM

Analisis tanggungjawab jurutera hadapan: Apakah tugas utama? Dengan perkembangan pesat Internet, jurutera hadapan memainkan peranan profesional yang sangat penting, memainkan peranan penting sebagai jambatan antara pengguna dan aplikasi laman web. Jadi, apakah yang sering dilakukan oleh jurutera hadapan? Artikel ini akan menganalisis tanggungjawab jurutera hadapan, mari kita ketahui. 1. Tanggungjawab asas jurutera bahagian hadapan Pembangunan dan penyelenggaraan laman web: Jurutera bahagian hadapan bertanggungjawab untuk pembangunan bahagian hadapan tapak web, termasuk menulis HTML, CSS dan JavaScr tapak web

Apakah pekerjaan yang anda boleh dapatkan dengan mempelajari Java? Apakah pekerjaan yang anda boleh dapatkan dengan mempelajari Java? Jan 16, 2024 pm 04:58 PM

Pekerjaan yang mungkin: 1. Pembangunan aplikasi peringkat perusahaan; 3. Pembangunan aplikasi mudah alih; pembangunan aplikasi industri, dsb. Pengenalan terperinci: 1. Pembangunan aplikasi peringkat perusahaan: Java menduduki kedudukan penting dalam pembangunan aplikasi peringkat perusahaan dan boleh digunakan untuk membangunkan sistem yang besar dan kompleks, seperti ERP, CRM, dsb. Sistem ini biasanya perlu memproses sejumlah besar data, menyokong konkurensi yang tinggi, dan memastikan kestabilan sistem 2. Pembangunan laman web: termasuk bahagian hadapan dan bahagian belakang, dsb.

ChatGPT dan lain-lain tidak akan mengambil alih kerja manusia dalam masa terdekat Mereka terdedah kepada ralat, dan AI tidak akan berfungsi secara percuma. ChatGPT dan lain-lain tidak akan mengambil alih kerja manusia dalam masa terdekat Mereka terdedah kepada ralat, dan AI tidak akan berfungsi secara percuma. May 21, 2023 am 08:49 AM

Pengeluaran berturut-turut model besar seperti ChatGPT telah membuatkan ramai orang berasa tertekan dan takut bahawa AI akan mengambil alih tugas mereka tidak lama lagi. Dalam hal ini, OpenAI juga telah menerbitkan kajian yang menunjukkan bahawa kesan ChatGPT meliputi semua kelas pendapatan, dan pekerjaan berpendapatan tinggi mungkin menghadapi risiko yang lebih besar. Apakah faktanya? Patutkah kita mengautomasikan semua pekerjaan, walaupun pekerjaan yang memuaskan? Ia adalah salah satu daripada beberapa soalan yang dibangkitkan baru-baru ini oleh Future of Life Institute, yang telah meminta moratorium terhadap eksperimen kecerdasan buatan berskala besar dan kini telah ditandatangani oleh lebih 10,000 orang, termasuk Elon Musk, Steve Wozniak dan Andrew Yang

Apakah kaedah pemprosesan masa dalam bahasa Go? Apakah kaedah pemprosesan masa dalam bahasa Go? Jun 10, 2023 pm 09:42 PM

Sebagai bahasa pengaturcaraan moden, bahasa Go memainkan peranan penting dalam pembangunan. Bahasa Go menyediakan beberapa fungsi dan struktur masa terbina dalam untuk menjadikan pemprosesan masa lebih mudah. Dalam artikel ini, kami akan memperkenalkan beberapa kaedah pemprosesan masa yang biasa digunakan dalam bahasa Go. time.Now() Kita boleh menggunakan fungsi time.Now() untuk mendapatkan masa semasa: now:=time.Now()fmt.Println(now) output: 2019-06-131

Apakah jenis pekerjaan yang anda boleh dapatkan dengan mempelajari java? Apakah jenis pekerjaan yang anda boleh dapatkan dengan mempelajari java? Jan 16, 2024 pm 05:18 PM

Pekerjaan yang boleh anda temui dengan mempelajari Java: 1. Pembangunan aplikasi peringkat perusahaan 3. Pembangunan Android; . Pembangunan dan penyelenggaraan perisian 10. Keselamatan dan latihan Pengenalan terperinci: 1. Pembangunan aplikasi peringkat perusahaan Java menduduki kedudukan yang sangat penting dalam pembangunan aplikasi peringkat perusahaan Menggunakan Java, pelbagai aplikasi peringkat perusahaan yang kompleks boleh dibangunkan, seperti sistem OA dan sebagainya.

Apakah jenis kerja yang boleh saya lakukan pada masa hadapan menggunakan bahasa C? Apakah jenis kerja yang boleh saya lakukan pada masa hadapan menggunakan bahasa C? Jan 29, 2024 pm 02:47 PM

Pekerjaan yang boleh dilakukan oleh bahasa C pada masa hadapan: 1. Pembangunan sistem; 3. Pembangunan rangkaian; 9 , Bidang pendidikan 10. Analisis data dan pembelajaran mesin 11. Pembangunan dan penyelenggaraan perisian; Pengenalan terperinci: 1. Bahasa C ialah bahasa biasa untuk pengaturcaraan peringkat sistem Ia boleh digunakan untuk membangunkan sistem pengendalian dan sistem terbenam Jika anda menguasai bahasa C, anda boleh menjadi jurutera pembangunan sistem , dsb.

Bagaimana untuk mengalih keluar URL yang tidak diingini daripada bar alamat Chrome? Bagaimana untuk mengalih keluar URL yang tidak diingini daripada bar alamat Chrome? Mar 08, 2024 am 09:19 AM

Chrome akan merekodkan URL yang telah dimasukkan secara automatik dalam bar alamat dan secara automatik akan "mengaitkan kandungan pertanyaan" pada masa hadapan, tetapi sering kali kita tidak memerlukan beberapa URL, bagaimana untuk memadamkannya? Editor sering menghadapi masalah ini Alamat yang telah dimasukkan sebelum ini akan disekat di hadapan alamat yang biasa digunakan, menyebabkan keperluan untuk memilih beberapa kali untuk memasuki laman web yang dikehendaki. Saya telah mencari cara untuk memadamnya sekurang-kurangnya tiga kali kerana... saya lupa setiap kali. Dalam pintasan bar alamat pintasan papan kekunci Chrome bantuan rasmi Chrome, kekunci pintasan padam dijelaskan: ▍Windows memadamkan kandungan perkaitan bar alamat Tekan kekunci anak panah ke bawah untuk menyerlahkan kandungan yang sepadan dan kemudian tekan kekunci Shift+Delete ▍macOS. memadamkan alamat Bar perkaitan kandungan klik ke bawah

See all articles