Bagaimana untuk melaksanakan model IO dan Pemilih teknologi asas Java
Melaksanakan model IO dan Pemilih teknologi asas Java
Dalam pengaturcaraan Java, model dan Pemilih IO (Input-Output) adalah teknologi asas yang sangat penting untuk memproses komunikasi rangkaian dan operasi fail dengan cekap. Dalam artikel ini, kami akan menyelidiki prinsip pelaksanaan model IO dan Pemilih dalam Java, dan menyediakan contoh kod khusus untuk membantu pembaca memahami konsep ini dengan lebih baik.
1. Model IO
- Menyekat IO
Model IO yang menyekat ialah model IO yang paling asas. Di bawah model ini, apabila aplikasi memulakan permintaan IO, jika data belum sedia, aplikasi akan disekat sehingga data bersedia untuk meneruskan pelaksanaan. Pelaksanaan model ini sangat mudah, tetapi kurang cekap dalam persekitaran konkurensi tinggi. - IO yang tidak menyekat
Model IO yang tidak menyekat menyemak kesediaan operasi IO melalui tinjauan pendapat Jika data tidak bersedia, aplikasi boleh kembali serta-merta tanpa disekat. Walau bagaimanapun, model ini memerlukan aplikasi untuk mengundi secara berterusan dan tidak cekap. - Multiplexed IO
Model IO multiplexed memaklumkan aplikasi kesediaan untuk operasi IO melalui pemberitahuan acara, dan tidak memerlukan aplikasi untuk membuat tinjauan secara aktif. Selector dan SelectableChannel dalam Java adalah berdasarkan model IO berganda.
2. Penggunaan Selector
Selector ialah komponen penting dalam pustaka Java NIO, satu thread boleh menguruskan operasi IO berbilang Saluran. Pemilih menyediakan mekanisme pemultipleksan IO yang cekap yang boleh meningkatkan kecekapan komunikasi rangkaian.
Langkah asas untuk menggunakan Selector adalah seperti berikut:
- Buat Selector
Selector selector = Selector.open(); - Create SelectableChannel
SelectableChannel channel = new SocketChannel(); - Selector
channel daftar( pemilih, SelectionKey.OP_READ); - Pilih acara IO melalui Selector
int readyChannels = selector.select(); - Kendalikan acara IO
Setselector.selectedKeys(); = selectedKeys .iterator();
while (keyIterator.hasNext()) {
SelectionKey key = keyIterator.next();
if (key.isReadable()) {
// Kendalikan acara boleh dibaca
}
keyIterator.remove( ) ;
}
public class Server { public static void main(String[] args) throws IOException { ServerSocketChannel serverSocket = ServerSocketChannel.open(); serverSocket.socket().bind(new InetSocketAddress(8888)); serverSocket.configureBlocking(false); Selector selector = Selector.open(); serverSocket.register(selector, SelectionKey.OP_ACCEPT); while (true) { int readyChannels = selector.select(); if (readyChannels == 0) continue; Set<SelectionKey> selectedKeys = selector.selectedKeys(); Iterator<SelectionKey> keyIterator = selectedKeys.iterator(); while (keyIterator.hasNext()) { SelectionKey key = keyIterator.next(); if (key.isAcceptable()) { SocketChannel client = serverSocket.accept(); client.configureBlocking(false); client.register(selector, SelectionKey.OP_READ); System.out.println("客户端连接:" + client.getRemoteAddress()); } else if (key.isReadable()) { SocketChannel client = (SocketChannel) key.channel(); ByteBuffer buffer = ByteBuffer.allocate(1024); int bytesRead = client.read(buffer); while (bytesRead > 0) { buffer.flip(); while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); } System.out.println(); bytesRead = client.read(buffer); } } keyIterator.remove(); } } } }
public class Client { public static void main(String[] args) throws IOException { SocketChannel socket = SocketChannel.open(); socket.configureBlocking(false); socket.connect(new InetSocketAddress("localhost", 8888)); Selector selector = Selector.open(); socket.register(selector, SelectionKey.OP_CONNECT); while (true) { int readyChannels = selector.select(); if (readyChannels == 0) continue; Set<SelectionKey> selectedKeys = selector.selectedKeys(); Iterator<SelectionKey> keyIterator = selectedKeys.iterator(); while (keyIterator.hasNext()) { SelectionKey key = keyIterator.next(); if (key.isConnectable()) { if (socket.finishConnect()) { socket.register(selector, SelectionKey.OP_WRITE); System.out.println("客户端连接成功"); } } else if (key.isWritable()) { ByteBuffer buffer = ByteBuffer.allocate(1024); buffer.put("Hello, Server".getBytes()); buffer.flip(); while (buffer.hasRemaining()) { socket.write(buffer); } System.out.println("发送数据到服务端"); } keyIterator.remove(); } } } }
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan model IO dan Pemilih teknologi asas Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.
