Dec 01, 2025

Kako izvesti asinhroni ulaz/izlaz datoteka u Java NIO?

Ostavi poruku

Hej tamo! Kao dobavljač NIO-a, imam nešto da podijelim o izvođenju asinhronog U/I-a datoteka u Java NIO. To je prilično kul tema, i oduševljen sam da vas provedem kroz nju.

Prvo, hajde da razgovaramo o tome zašto je asinhroni U/I fajl tako velika stvar. U tradicionalnim I/O operacijama, nit je blokirana dok se operacija ne završi. To znači da u međuvremenu ne može učiniti ništa drugo, što može biti stvarno teško, posebno kada se radi o velikim datotekama ili višestrukim I/O operacijama. Asinhroni I/O, s druge strane, dozvoljava niti da nastavi raditi druge zadatke dok je I/O operacija u toku. To je kao da imate pomoćnika koji se brine o dosadnim stvarima dok se vi fokusirate na važne stvari.

Dakle, kako da izvedemo asinhroni U/I fajl u Java NIO? Pa, Java NIO (Novi I/O) pruža skup klasa i interfejsa koji čine relativno lakim rad sa asinhronim I/O. Jedna od ključnih klasa jeAsynchronousFileChannel. Ova klasa vam omogućava da izvodite asinkrone operacije čitanja i pisanja na datoteke.

Počnimo s jednostavnim primjerom asinhronog čitanja datoteke. Evo nekog koda za početak:

import java.nio.ByteBuffer; import java.nio.channels.AsynchronousFileChannel; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.concurrent.Future; public class AsyncFileReadExample { public static void main(String[] args) { try { Path path = Paths.get("test.txt"); AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.READ); BajtBuffer bafer = ByteBuffer.allocate(1024); Future<Integer> rezultat = fileChannel.read(buffer, 0); while (!result.isDone()) { // Radite druge zadatke dok je operacija čitanja u toku System.out.println("Radi druge zadatke..."); } int bytesRead = result.get(); System.out.println("Bytes read: " + bytesRead); buffer.flip(); bajt[] podaci = novi bajt[buffer.limit()]; buffer.get(podaci); System.out.println(novi niz (podaci)); fileChannel.close(); } catch (izuzetak e) { e.printStackTrace(); } } }

U ovom primjeru prvo otvaramo anAsynchronousFileChannelza čitanje. Zatim dodjeljujemo aByteBufferda zadrži podatke koje ćemo pročitati. KoristimočitajmetodomAsynchronousFileChannelda asinhrono pokrenete operaciju čitanja. Ova metoda vraća aBudućnostobjekt, koji predstavlja rezultat asinkrone operacije.

Možemo koristitiisDonemetodomBudućnostobjekt da provjeri da li je operacija završena. Dok operacija nije obavljena, možemo raditi druge zadatke. Kada se operacija završi, koristimodobitimetodomBudućnostobjekt da dobijete broj pročitanih bajtova.

Sada, hajde da pričamo o asinhronom pisanju fajla. Evo primjera:

import java.nio.ByteBuffer; import java.nio.channels.AsynchronousFileChannel; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.concurrent.Future; public class AsyncFileWriteExample { public static void main(String[] args) { try { Path path = Paths.get("output.txt"); AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.WRITE, StandardOpenOption.CREATE); String data = "Zdravo, svijet!"; ByteBuffer bafer = ByteBuffer.wrap(data.getBytes()); Future<Integer> rezultat = fileChannel.write(buffer, 0); while (!result.isDone()) { // Radite druge zadatke dok je operacija pisanja u toku System.out.println("Radi druge zadatke..."); } int bytesWritten = rezultat.get(); System.out.println("Upisani bajtovi: " + bytesWritten); fileChannel.close(); } catch (izuzetak e) { e.printStackTrace(); } } }

Proces je sličan asinhronom čitanju datoteke. Otvaramo anAsynchronousFileChannelza pisanje, dodijelite aByteBuffersa podacima koje želimo da zapišemo i koristimopisatimetodomAsynchronousFileChannelda asinhrono pokrenete operaciju pisanja.

Drugi način za rukovanje asinhronim I/O u Java NIO je korištenje rukovatelja završetka. Rukovalac dovršetka je objekat koji dobija obaveštenje kada se asinhrona operacija završi. Evo primjera korištenja obrađivača završetka za asinhrono čitanje datoteke:

import java.nio.ByteBuffer; import java.nio.channels.AsynchronousFileChannel; import java.nio.channels.CompletionHandler; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; public class AsyncFileReadWithCompletionHandler { public static void main(String[] args) { try { Path path = Paths.get("test.txt"); AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.READ); BajtBuffer bafer = ByteBuffer.allocate(1024); fileChannel.read(buffer, 0, buffer, new CompletionHandler<Integer, ByteBuffer>() { @Override public void završen(Integer rezultat, ByteBuffer prilog) { System.out.println("Bytes read: " + rezultat); attachment.flip(); byte[] datach = new byte.[atta)] System.out.println(new String(data)) {fileChannel.close() { e.printStackTrace(} } @Override public void() // Radi druge zadatke dok je operacija čitanja u toku System.out.println("Radi druge zadatke..."); } catch (izuzetak e) { e.printStackTrace(); } } }

U ovom primjeru prenosimo aCompletionHandlerprigovor načitajmetodomAsynchronousFileChannel. ThezavršenometodomCompletionHandlerse poziva kada je operacija čitanja uspješna, anije uspjelometoda se poziva ako operacija ne uspije.

Nio ET5 specificationsNio ET5 price details

Kao dobavljač NIO-a, uvijek tražimo načine za optimizaciju performansi i efikasnosti. Asinhroni fajl I/O u Java NIO je odličan alat za postizanje ovih ciljeva. Može značajno poboljšati odziv vaše aplikacije, posebno kada se bavite I/O intenzivnim zadacima.

Ako ste na tržištu za električni automobil visokih performansi, pogledajteNio ET5 električni automobil. To je elegantno i snažno vozilo koje kombinuje najsavremeniju tehnologiju sa stilskim dizajnom.

Ako ste zainteresovani da saznate više o Javi NIO ili imate bilo kakva pitanja o našim proizvodima i uslugama, ne ustručavajte se da nam se obratite. Uvijek nam je drago razgovarati i vidjeti kako vam možemo pomoći u vezi s vašim potrebama. Bilo da želite da optimizujete I/O performanse svoje aplikacije ili vam je potreban savet o najnovijim Java tehnologijama, mi smo tu za vas. Dakle, hajde da se okrenemo i započnemo razgovor o tome kako možemo da radimo zajedno.

Reference:

  • Java NIO Tutoriali
  • Oracle Java dokumentacija na AsynchronousFileChannel
Pošaljite upit