Hej tam! Jako dostawca NIO byłem głęboko zaangażowany w świat produktów NIO, takich jak niesamowiteSamochód elektryczny Nio ET5. Ale dzisiaj zmienię bieg i porozmawiam o czymś z dziedziny programowania w Javie — o tym, jak stworzyć FileChannel w Java NIO.
Co to jest Java NIO i FileChannel?
Na początek przyjrzyjmy się szybko, czym jest Java NIO. Java NIO (New I/O) to alternatywny interfejs API wejścia/wyjścia dla języka Java, wprowadzony w Javie 1.4. Został zaprojektowany tak, aby był bardziej wydajny i elastyczny niż tradycyjne wejścia/wyjścia Java. Do obsługi transmisji danych wykorzystuje bufory i kanały, co pozwala na nieblokujące operacje we/wy.
FileChannel to kanał umożliwiający odczytywanie, zapisywanie, mapowanie i manipulowanie plikiem. Jest częścią pakietu Java NIO i umożliwia wykonywanie operacji we/wy na plikach w bardziej efektywny i wydajny sposób w porównaniu z tradycyjnymi klasami we/wy na plikach Java.
Warunki wstępne
Zanim zaczniemy tworzyć FileChannel, musisz posiadać podstawową wiedzę na temat programowania w Javie. Powinieneś wiedzieć o klasach, obiektach i podstawowych koncepcjach obsługi plików. Upewnij się także, że na komputerze jest skonfigurowane środowisko programistyczne Java, takie jak Java Development Kit (JDK).
Tworzenie kanału FileChannel do odczytu
Zacznijmy od utworzenia FileChannel do odczytu pliku. Oto jak możesz to zrobić:
importuj java.io.FileInputStream; importuj java.nio.channels.FileChannel; klasa publiczna ReadFileChannelExample { public static void main(String[] args) { try { // Utwórz FileInputStream FileInputStream fis = new FileInputStream("example.txt"); // Pobierz FileChannel z FileInputStream FileChannel channel = fis.getChannel(); System.out.println("Kanał pliku utworzony do odczytu!"); // Zamknij kanał i kanał strumieniowy.close(); fis.close(); } catch (Wyjątek e) { e.printStackTrace(); } } }
W tym kodzie najpierw tworzymy plikStrumień wejściowy plikuobiekt, który służy do odczytu danych z pliku. Następnie nazywamypobierzKanał()metoda naStrumień wejściowy plikudostaćKanał plikuobiekt. TenKanał plikumożna teraz używać do odczytu danych z pliku. Na koniec zamykamyKanał plikuiStrumień wejściowy plikuaby zwolnić zasoby systemowe.
Tworzenie kanału FileChannel do zapisu
Zobaczmy teraz, jak utworzyć FileChannel do zapisu do pliku. Oto kod:
importuj java.io.FileOutputStream; importuj java.nio.channels.FileChannel; klasa publiczna WriteFileChannelExample { public static void main(String[] args) { try { // Utwórz FileOutputStream FileOutputStream fos = new FileOutputStream("output.txt"); // Pobierz FileChannel z FileOutputStream FileChannel channel = fos.getChannel(); System.out.println("Kanał pliku utworzony do zapisu!"); // Zamknij kanał i kanał strumieniowy.close(); fos.close(); } catch (Wyjątek e) { e.printStackTrace(); } } }
Podobnie jak w przykładzie czytania, najpierw tworzymy plikStrumień pliku wyjściowegoobiekt, który służy do zapisywania danych do pliku. Następnie nazywamypobierzKanał()metoda naStrumień pliku wyjściowegodostaćKanał plikuobiekt. TenKanał plikumożna teraz używać do zapisywania danych do pliku. I znowu zamykamyKanał plikuiStrumień pliku wyjściowegona końcu.
Tworzenie kanału FileChannel do odczytu i zapisu
Czasami może być konieczne zarówno odczytanie, jak i zapisanie pliku przy użyciu pojedynczegoKanał pliku. Oto jak możesz to zrobić:
importuj plik java.io.RandomAccessFile; importuj java.nio.channels.FileChannel; klasa publiczna ReadWriteFileChannelExample { public static void main(String[] args) { try { // Utwórz plik RandomAccessFile RandomAccessFile raf = new RandomAccessFile("rw_example.txt", "rw"); // Pobierz FileChannel z RandomAccessFile FileChannel channel = raf.getChannel(); System.out.println("Kanał pliku utworzony do odczytu i zapisu!"); // Zamknij kanał i plik channel.close(); raf.zamknij(); } catch (Wyjątek e) { e.printStackTrace(); } } }
W tym kodzie używamy aPlik o dostępie losowymobiekt. Drugi parametr„rw”wPlik o dostępie losowymkonstruktor wskazuje, że chcemy otworzyć plik zarówno do odczytu, jak i zapisu. Następnie otrzymujemyKanał plikuzPlik o dostępie losowymi użyj go w razie potrzeby.
Praca z buforami i FileChannel
Gdy już maszKanał pliku, z którym zazwyczaj będziesz pracowaćBufor bajtówdo odczytu lub zapisu danych. Oto przykład odczytu danych z pliku za pomocą aKanał plikui aBufor bajtów:


importuj java.io.FileInputStream; importuj java.nio.ByteBuffer; importuj java.nio.channels.FileChannel; klasa publiczna ReadDataWithBufferExample { public static void main(String[] args) { try { FileInputStream fis = nowy FileInputStream("example.txt"); Kanał FileChannel = fis.getChannel(); // Utwórz bufor ByteBuffer ByteBuffer bufor = ByteBuffer.allocate(1024); // Odczytaj dane z kanału do bufora int bytesRead = channel.read(buffer); while (bytesRead != -1) { System.out.println("Przeczytane bajty: " + bytesRead); // Przygotuj bufor do odczytu bufora.flip(); while (buffer.hasRemaining()) { System.out.print((char) bufor.get()); } // Wyczyść bufor dla następnego odczytu bufor.clear(); bytesRead = kanał.odczyt(bufor); } kanał.zamknij(); fis.close(); } catch (Wyjątek e) { e.printStackTrace(); } } }
W tym kodzie najpierw tworzymy plikBufor bajtówo pojemności 1024 bajtów. Następnie korzystamy zCzytać()metodaKanał plikudo odczytania danych z pliku do bufora. Po przeczytaniu odwracamy bufor, aby przygotować go do odczytania jego zawartości. Drukujemy dane, a następnie czyścimy bufor do kolejnej operacji odczytu.
Dlaczego warto korzystać z FileChannel?
Być może zastanawiasz się, dlaczego warto skorzystaćKanał plikuzamiast tradycyjnych klas we/wy plików Java. Dobrze,Kanał plikuoferuje kilka korzyści:
- Nieblokujące wejścia/wyjścia: Umożliwia nieblokujące operacje we/wy, co może poprawić wydajność aplikacji, szczególnie w przypadku wielu plików lub dużych plików.
- Pamięć - zmapowane pliki: Możesz użyć
Kanał plikudo tworzenia plików mapowanych w pamięć, które mapują region pliku bezpośrednio do pamięci. Może to być znacznie szybsze niż tradycyjne operacje we/wy. - Scatter — zbieranie wejść/wyjść:
Kanał plikuobsługuje scatter - zbieranie I/O, co oznacza, że możesz czytać dane z pliku do wielu buforów lub zapisywać dane z wielu buforów do pliku w jednej operacji.
Wniosek
TworzenieKanał plikuw Javie NIO nie jest takie trudne, jeśli zrozumiesz podstawowe pojęcia. Niezależnie od tego, czy chcesz czytać, pisać, czy jedno i drugie, istnieją proste sposoby tworzenia i używania plikówKanał pliku. Jako dostawca NIO wiem, jak ważne jest posiadanie wydajnych i niezawodnych operacji we/wy, podobnie jak samochody NIO są znane ze swojej wysokiej wydajności i niezawodności, np.Samochód elektryczny Nio ET5.
Jeśli jesteś zainteresowany wdrożeniemKanał plikuw swoich projektach Java lub masz jakiekolwiek pytania związane z Java NIO, skontaktuj się z nami w celu omówienia zakupów. Jesteśmy tutaj, aby pomóc Ci w pełni wykorzystać te potężne narzędzia programistyczne.
Referencje
- Samouczki Java NIO dotyczące dokumentacji Oracle
- Efektywna Java autorstwa Joshuy Blocha



























































