Bok tamo! Kao NIO dobavljač, bio sam duboko uključen u svijet NIO proizvoda, poput nevjerojatnihElektrični automobil Nio ET5. Ali danas ću promijeniti brzinu i razgovarati o nečemu u području Java programiranja - kako stvoriti FileChannel u Java NIO.
Što je Java NIO i FileChannel?
Prvo, idemo na brzinu objasniti što je Java NIO. Java NIO (New I/O) je alternativni I/O API za Javu, predstavljen u Javi 1.4. Dizajniran je da bude učinkovitiji i fleksibilniji od tradicionalnog Java I/O. Koristi međuspremnike i kanale za upravljanje prijenosom podataka, što omogućuje neblokirajuće I/O operacije.
FileChannel je kanal za čitanje, pisanje, mapiranje i manipuliranje datotekom. Dio je paketa Java NIO i pruža način za izvođenje I/O operacija na datotekama na učinkovitiji i snažniji način u usporedbi s tradicionalnim I/O klasama datoteka Java.
Preduvjeti
Prije nego počnemo stvarati FileChannel, morate imati osnovno razumijevanje Java programiranja. Trebali biste znati o klasama, objektima i osnovnim konceptima rukovanja datotekama. Također, provjerite imate li Java razvojno okruženje postavljeno na vašem računalu, kao što je Java Development Kit (JDK).
Stvaranje FileChannel za čitanje
Počnimo sa stvaranjem FileChannel za čitanje datoteke. Evo kako to možete učiniti:
import java.io.FileInputStream; import java.nio.channels.FileChannel; public class ReadFileChannelExample { public static void main(String[] args) { try { // Stvori FileInputStream FileInputStream fis = new FileInputStream("example.txt"); // Dobivanje FileChannel iz FileInputStream FileChannel kanala = fis.getChannel(); System.out.println("Datotečni kanal stvoren za čitanje!"); // Zatvaranje kanala i kanala toka.close(); fis.zatvori(); } catch (Iznimka e) { e.printStackTrace(); } } }
U ovom kodu prvo stvaramo aFileInputStreamobjekt, koji se koristi za čitanje podataka iz datoteke. Zatim pozivamogetChannel()metoda naFileInputStreamdobiti aFileChannelobjekt. OvajFileChannelsada se može koristiti za čitanje podataka iz datoteke. Na kraju zatvaramoFileChanneliFileInputStreamza oslobađanje resursa sustava.
Stvaranje FileChannel za pisanje
Pogledajmo sada kako stvoriti FileChannel za pisanje u datoteku. Evo koda:
import java.io.FileOutputStream; import java.nio.channels.FileChannel; public class WriteFileChannelExample { public static void main(String[] args) { try { // Stvori FileOutputStream FileOutputStream fos = new FileOutputStream("output.txt"); // Dobivanje FileChannel iz FileOutputStream FileChannel kanala = fos.getChannel(); System.out.println("FileChannel kreiran za pisanje!"); // Zatvaranje kanala i kanala toka.close(); fos.close(); } catch (Iznimka e) { e.printStackTrace(); } } }
Slično primjeru čitanja, prvo stvaramo aFileOutputStreamobjekt, koji se koristi za pisanje podataka u datoteku. Zatim pozivamogetChannel()metoda naFileOutputStreamdobiti aFileChannelobjekt. OvajFileChannelsada se može koristiti za pisanje podataka u datoteku. I opet, zatvaramoFileChanneliFileOutputStreamna kraju.
Stvaranje FileChannel za čitanje i pisanje
Ponekad ćete možda trebati i čitati i pisati u datoteku koristeći jedanFileChannel. Evo kako to možete učiniti:
import java.io.RandomAccessFile; import java.nio.channels.FileChannel; public class ReadWriteFileChannelExample { public static void main(String[] args) { try { // Create a RandomAccessFile RandomAccessFile raf = new RandomAccessFile("rw_example.txt", "rw"); // Dobivanje FileChannel iz RandomAccessFile FileChannel kanala = raf.getChannel(); System.out.println("FileChannel kreiran i za čitanje i za pisanje!"); // Zatvaranje kanala i datoteke channel.close(); raf.close(); } catch (Iznimka e) { e.printStackTrace(); } } }
U ovom kodu koristimo aRandomAccessFileobjekt. Drugi parametar"rw"uRandomAccessFilekonstruktor označava da želimo otvoriti datoteku i za čitanje i za pisanje. Zatim, dobivamoFileChannelizRandomAccessFilei koristiti ga prema potrebi.
Rad s međuspremnicima i FileChannelom
Nakon što imate aFileChannel, s kojim ćete obično raditiByteBufferza čitanje ili pisanje podataka. Evo primjera čitanja podataka iz datoteke pomoću aFileChanneli aByteBuffer:


import java.io.FileInputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class ReadDataWithBufferExample { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("example.txt"); Kanal FileChannel = fis.getChannel(); // Kreirajte ByteBuffer ByteBuffer međuspremnik = ByteBuffer.allocate(1024); // Čitanje podataka iz kanala u međuspremnik int bytesRead = channel.read(buffer); while (bytesRead != -1) { System.out.println("Bytes Read: " + bytesRead); // Priprema međuspremnika za čitanje buffer.flip(); while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); } // Brisanje međuspremnika za sljedeće čitanje buffer.clear(); bytesRead = channel.read(buffer); } kanal.zatvori(); fis.zatvori(); } catch (Iznimka e) { e.printStackTrace(); } } }
U ovom kodu prvo stvaramo aByteBuffers kapacitetom od 1024 bajta. Zatim koristimočitaj()metodaFileChannelza čitanje podataka iz datoteke u međuspremnik. Nakon čitanja, okrećemo međuspremnik kako bismo ga pripremili za čitanje njegovog sadržaja. Ispisujemo podatke i zatim brišemo međuspremnik za sljedeću operaciju čitanja.
Zašto koristiti FileChannel?
Možda se pitate zašto biste trebali koristitiFileChannelumjesto tradicionalnih I/O klasa Java datoteke. Dobro,FileChannelnudi nekoliko prednosti:
- Neblokirajući I/O: Omogućuje neblokirajuće I/O operacije, koje mogu poboljšati performanse vaše aplikacije, posebno kada se radi s više datoteka ili velikim datotekama.
- Memorija - mapirane datoteke: Možete koristiti
FileChannelza stvaranje memorije - mapirane datoteke, koje preslikavaju područje datoteke izravno u memoriju. Ovo može biti puno brže od tradicionalnih I/O operacija. - Scatter - sakupi I/O:
FileChannelpodržava raspršivanje - prikupljanje I/O, što znači da možete čitati podatke iz datoteke u više međuspremnika ili pisati podatke iz više međuspremnika u datoteku u jednoj operaciji.
Zaključak
Stvaranje aFileChannelu Javi NIO nije tako težak kada shvatite osnovne koncepte. Bilo da trebate čitati, pisati ili oboje, postoje jednostavni načini za stvaranje i korištenje aFileChannel. I kao NIO dobavljač, znam koliko je važno imati učinkovite i pouzdane I/O operacije, baš kao što su NIO automobili poznati po svojim visokim performansama i pouzdanosti, poputElektrični automobil Nio ET5.
Ako ste zainteresirani za implementacijuFileChannelu svojim Java projektima ili imate bilo kakvih pitanja vezanih uz Java NIO, slobodno nam se obratite radi rasprave o nabavi. Ovdje smo da vam pomognemo da maksimalno iskoristite ove moćne alate za programiranje.
Reference
- Java NIO Vodiči o Oracle dokumentaciji
- Učinkovita Java Joshue Blocha



























































