Rumah > Java > javaTutorial > Cara menggunakan fungsi NIO untuk operasi IO yang cekap di Jawa

Cara menggunakan fungsi NIO untuk operasi IO yang cekap di Jawa

WBOY
Lepaskan: 2023-06-26 17:06:10
asal
1106 orang telah melayarinya

Dengan perkembangan pesat teknologi Internet, permintaan untuk pelbagai sistem aplikasi berskala besar terus meningkat, dan keperluan untuk operasi IO yang cekap menjadi semakin mendesak. Sebagai bahasa pengaturcaraan yang biasa digunakan, Java semakin banyak digunakan dalam operasi IO. Fungsi NIO, sebagai kaedah pelaksanaan operasi IO yang cekap, juga telah menarik banyak perhatian dalam beberapa tahun kebelakangan ini. Artikel ini akan memperkenalkan cara menggunakan fungsi NIO dalam Java untuk melaksanakan operasi IO yang cekap.

1. Pengenalan kepada NIO

NIO, atau I/O Baharu, ialah API IO baharu yang diperkenalkan dalam versi Java 1.4 Berbanding dengan API IO tradisional, NIO melaksanakan operasi IO yang tidak menyekat. API IO tradisional adalah berorientasikan aliran, manakala NIO berorientasikan blok. Kelemahan penstriman IO ialah apabila fail besar perlu dibaca dan ditulis, banyak masalah menyekat IO membaca dan menulis akan berlaku, yang menjejaskan kecekapan program secara serius. Sekat IO boleh mengelakkan sekatan IO yang tidak perlu dan meningkatkan kecekapan operasi IO apabila membaca dan menulis blok data. Pada masa yang sama, NIO juga menyediakan mekanisme pemultipleksan (Multiplexing) yang cekap, yang boleh memantau berbilang peristiwa IO pada masa yang sama dan meningkatkan kecekapan komunikasi rangkaian.

2. Penggunaan NIO

  1. Kelas penimbal dalam NIO

Kelas Penampan dalam NIO ialah salah satu kelas teras, dan fungsinya adalah untuk cache membaca dan menulis data. Berbeza daripada API IO tradisional, Penimbal dalam NIO mempunyai peraturan tertentu untuk membaca dan menulis data Contohnya, sebelum menulis data, anda perlu memanggil kaedah Buffer.flip() untuk menetapkan semula penunjuk tulis penimbal untuk operasi membaca. Kelas Penampan mempunyai banyak kaedah lain, seperti position(), limit(), capacity(), dsb., yang boleh digunakan mengikut keperluan. Di samping itu, terdapat pelbagai kelas Penampan dalam NIO, seperti ByteBuffer, CharBuffer, IntBuffer, dsb., digunakan untuk menyimpan pelbagai jenis data.

  1. Kelas saluran dalam NIO

Selain kelas Buffer, kelas Channel juga merupakan salah satu kelas teras dalam NIO Fungsinya adalah untuk membaca dan menulis data. Kelas Saluran dalam NIO termasuk pelbagai jenis saluran, seperti FileChannel, DatagramChannel, dsb. Tidak seperti API IO tradisional, kelas Saluran dalam NIO boleh melaksanakan operasi IO tanpa sekatan.

  1. Kelas pemilih dalam NIO

Kelas Pemilih dalam NIO ialah kelas utama untuk melaksanakan pemultipleksan dalam NIO. Kelas Pemilih boleh memantau berbilang Saluran Apabila satu atau lebih Saluran mempunyai data yang boleh dibaca atau ditulis, Pemilih akan memberitahu Saluran yang sepadan untuk melaksanakan operasi baca dan tulis. Menggunakan kelas Selector boleh mengelak daripada mencipta berbilang benang untuk membaca dan menulis berbilang Saluran, dengan itu meningkatkan kecekapan program.

3. Contoh NIO

Yang berikut menggunakan contoh untuk menggambarkan penggunaan NIO. Katakan terdapat fail, dan data dalam fail itu perlu dibaca baris demi baris dan output ke konsol.

  1. Baca kandungan fail

FileChannel boleh membaca kandungan fail melalui kaedah berikut:

public static void readFile(String fileName) throws IOException{
        FileInputStream fis = new FileInputStream(fileName);
        FileChannel fc = fis.getChannel();

        ByteBuffer buffer = ByteBuffer.allocate(1024);
        while(fc.read(buffer) != -1){
            buffer.flip();
            while(buffer.hasRemaining()){
                System.out.print((char)buffer.get());
            }
            buffer.clear();
        }

        fc.close();
        fis.close();
    }
Salin selepas log masuk

Dalam kod, mula-mula dapatkan saluran fail FileChannel melalui FileInputStream, kemudian buat penimbal ByteBuffer, dan nyatakan saiz penimbal menjadi 1024 . Apabila membaca fail, baca melalui kaedah fc.read(buffer) dan tentukan sama ada bacaan selesai. Jika bacaan tidak selesai, panggil kaedah buffer.flip() untuk menetapkan semula kedudukan dan had penimbal. Selepas setiap gelung membaca data dalam penimbal, anda perlu menetapkan kedudukan penimbal kepada 0 dan had kepada kapasiti penimbal, supaya penimbal boleh digunakan semula.

  1. Laksanakan bacaan baris demi baris

Anda boleh menggunakan kelas LineIterator untuk melaksanakan bacaan baris demi baris:

public static void readLine(String fileName) throws IOException{
        FileInputStream fis = new FileInputStream(fileName);
        FileChannel fc = fis.getChannel();

        ByteBuffer buffer = ByteBuffer.allocate(1024);
        Charset charset = Charset.forName("UTF-8");
        LineIterator iterator = new LineIterator(charset.newDecoder());

        while(fc.read(buffer) != -1){
            buffer.flip();
            iterator.read(buffer, new LineHandler() {
                @Override
                public boolean handle(String line) throws Exception {
                    System.out.println(line);
                    return true;
                }

                @Override
                public void endOfFile() throws Exception {
                    System.out.println("End of File.");
                }
            });
            buffer.compact();
        }

        iterator.finish();

        fc.close();
        fis.close();
    }
Salin selepas log masuk

Dalam kod, mula-mula buat objek LineIterator dan nyatakan pengekodan set aksara sebagai UTF-8 . Apabila membaca kandungan fail, baca kandungan fail baris demi baris melalui kaedah iterator.read(buffer,LineHandler). Kaedah pemegang(String line) dalam antara muka LineHandler digunakan untuk memproses baris bacaan data, dan kaedah endOfFile() digunakan untuk memproses situasi apabila bacaan fail tamat. Dalam kaedah pemegang, anda boleh memproses baris data yang anda baca, seperti mengeluarkannya ke konsol. . Dalam gelung sementara, pantau peristiwa IO melalui kaedah select() Selector. Apabila satu atau lebih peristiwa IO yang didaftarkan oleh Saluran dicetuskan, Pemilih akan mengembalikan SelectionKey yang sepadan. Anda boleh menggunakan kaedah SelectionKey.isAcceptable() untuk menentukan jenis SelectionKey dan melaksanakan operasi, seperti mendaftarkan operasi OP_READ bagi SocketChannel.

    4. Ringkasan
  1. Artikel ini memperkenalkan cara menggunakan fungsi NIO untuk melaksanakan operasi IO yang cekap di Jawa. Dengan memperkenalkan mekanisme NIO, masalah penyekatan IO tradisional dapat dielakkan dan kecekapan program dapat dipertingkatkan. Kelas teras dalam NIO termasuk Penampan, Saluran, Pemilih, dll., yang melaluinya pelbagai operasi IO yang cekap boleh diselesaikan. Dalam aplikasi sebenar, bentuk dan kaedah menggunakan fungsi NIO perlu ditentukan mengikut keperluan dan senario perniagaan tertentu untuk mendapatkan hasil yang terbaik.

Atas ialah kandungan terperinci Cara menggunakan fungsi NIO untuk operasi IO yang cekap di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan