Rumah Java javaTutorial Bagaimana untuk melaksanakan model IO dan Pemilih teknologi asas Java

Bagaimana untuk melaksanakan model IO dan Pemilih teknologi asas Java

Nov 08, 2023 pm 06:00 PM
selector model io lapisan bawah java

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

  1. 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.
  2. 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.
  3. 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:

  1. Buat Selector
    Selector selector = Selector.open();
  2. Create SelectableChannel
    SelectableChannel channel = new SocketChannel();
  3. Selector
    channel daftar( pemilih, SelectionKey.OP_READ);
  4. Pilih acara IO melalui Selector
    int readyChannels = selector.select();
  5. Kendalikan acara IO
    Setselector.selectedKeys(); = selectedKeys .iterator();
    while (keyIterator.hasNext()) {
    SelectionKey key = keyIterator.next();
    if (key.isReadable()) {
    // Kendalikan acara boleh dibaca
    }
    keyIterator.remove( ) ;
    }
Melalui langkah di atas, kita dapat melihat bahawa apabila menggunakan Pemilih, kita perlu mencipta objek terlebih dahulu, kemudian mendaftarkan saluran untuk operasi IO kepada Pemilih, dan kemudian memilih dan memproses peristiwa IO.

Mari kita lihat contoh khusus untuk melaksanakan program komunikasi pelayan dan pelanggan berasaskan Pemilih yang mudah.

Contoh kod pelayan:

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();
      }
    }
  }
}
Salin selepas log masuk

Contoh kod pelanggan:

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();
      }
    }
  }
}
Salin selepas log masuk

Melalui contoh kod di atas, kita boleh melihat cara menggunakan Selector untuk berkomunikasi antara pelayan dan klien. Dalam pelayan, kami mula-mula membuat ServerSocketChannel dan mendaftarkannya pada Pemilih, kemudian pilih acara IO dalam gelung dan mengendalikan permintaan sambungan pelanggan dan membaca data dalam klien, kami mencipta SocketChannel dan mendaftarkannya pada Pemilih, dan kemudian dalam gelung Pilih acara IO dan kendalikan sambungan dan penghantaran data.

Ringkasan

Melalui pengenalan dan contoh kod artikel ini, saya harap pembaca dapat memahami dengan lebih baik prinsip pelaksanaan dan penggunaan model dan Pemilih IO di Jawa. Kajian mendalam dan penguasaan teknologi asas ini adalah penting untuk menulis program komunikasi rangkaian dan operasi fail yang cekap. Perlu diingatkan bahawa dalam pembangunan sebenar, model dan teknologi IO yang sesuai perlu dipilih mengikut keperluan dan senario khusus untuk memenuhi keperluan projek dengan lebih baik.

Semasa proses pembelajaran, pembaca juga boleh mendalami pemahaman dan penguasaan teknologi asas ini dengan membaca bahan yang lebih relevan dan merujuk kepada kes aplikasi yang lebih praktikal. Pada masa yang sama, amalan dan eksperimen berterusan akan membantu pembaca memahami konsep ini dengan lebih mendalam dan dapat mengaplikasikannya dengan mahir untuk pembangunan projek sebenar.

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!

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)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan 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)

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

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

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

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

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Mar 17, 2025 pm 05:43 PM

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]

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Mar 17, 2025 pm 05:46 PM

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

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul? Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul? Mar 17, 2025 pm 05:45 PM

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

See all articles