Einführung in das Java NIO-Paket

Mehvish Ashiq 15 Februar 2024
  1. Einführung in das Java-Paket NIO
  2. Verwendung von das NIO-Paket zum Lesen und Schreiben in eine Datei in Java
Einführung in das Java NIO-Paket

Dieses Tutorial stellt das Java-Paket NIO vor. Wir haben bereits ein java.io-Paket zum Ausführen von Lese-/Schreiboperationen, aber java.nio erlaubt uns, mit zusätzlichen Features und Funktionalitäten anders zu arbeiten.

Wie? Lassen Sie uns in die Details eintauchen.

Einführung in das Java-Paket NIO

Java New Input/Output (NIO) ist eine hochleistungsfähige Dateiverwaltungsstruktur und Netzwerk-API. Das Paket java.nio enthält alle NIO-Klassen; es ersetzt keine Stream-basierten Input/Output (IO)-Klassen im java.io-Paket.

Das Java NIO wurde ab der Version JDK 4 eingeführt und arbeitet als Alternative zu java.io mit einigen zusätzlichen Features und Funktionalitäten, um mit Input/Output (IO) anders zu arbeiten als mit dem Standard Input/Output (IO).

Wir wissen bereits, dass das Paket java.io alle notwendigen Klassen enthält, die wir für Java-I/O-Operationen verwenden können, während java.nio buffer-Klassen einführt, die in allen Java NIO-APIs verwendet werden können .

Sie haben vielleicht eine Frage: Wenn wir bereits ein Paket java.io haben, was ist der Grund für die Einführung eines neuen namens java.nio?

Hauptgründe für die Verwendung des Java-Pakets NIO

Wir bevorzugen aus zwei Gründen die Verwendung des Pakets java.nio.

  1. Das Paket java.nio verwendet einen pufferorientierten Ansatz, der uns im Puffer hin- und herbewegen lässt. Es verwendet einen Speicherblock (auch als Puffer bezeichnet), um Daten zu lesen und zwischenzuspeichern, auf die bei Bedarf schnell aus dem Puffer zugegriffen wird. Wir können auch Daten in den Puffer schreiben.

  2. Das Paket java.nio kann nicht blockierende Eingabe-/Ausgabeoperationen (IO) ausführen. Nicht blockierend bedeutet hier, dass es die Daten/Informationen lesen kann, die es bereit findet.

    Zum Beispiel haben wir einen Thread, der den Kanal auffordert, die Daten/Informationen aus dem Puffer zu lesen; Der Thread geht in diesem Zeitrahmen zu anderen Operationen und fährt dort fort, wo er die Arbeit verlassen hat. Inzwischen ist der Lesevorgang abgeschlossen und steigert die Gesamtleistung.

    Der Hauptunterschied zwischen NIO und IO besteht darin, dass NIO nicht blockiert, während IO blockiert.

Wir können die Verwendung von Java NIO gegenüber dem IO-Paket priorisieren, wann immer wir nach einem pufferorientierten Ansatz und Hochgeschwindigkeits-Eingabe/Ausgabe-Operationen suchen.

Notiz
Um das Java NIO-Paket perfekt nutzen zu können, müssen Sie das Java IO-Paket verstehen.

Hauptkomponenten des Java-Pakets NIO

Es verfügt über die folgenden Hauptkomponenten, um ordnungsgemäß zu funktionieren.

  1. Buffer - Da das java.nio-Paket pufferorientiert ist, hat es Puffer für primitive Datentypen. Die Puffer werden als Container verwendet, in denen wir Daten aus dem/in den Puffer zur weiteren Verarbeitung über einen Kanal lesen können.

  2. Channel – Die Channel-Klasse von java.nio ähnelt Streams (IO-Streams), die für die bidirektionale Kommunikation verwendet werden. Durch die Verwendung von Kanälen können wir nicht blockierende Ein-/Ausgabeoperationen durchführen; Wir können auch Daten von den Kanälen lesen/schreiben.

    Die Kanäle werden als Gateway verwendet, wo die Verbindung zu verschiedenen Entitäten durch Kanäle beschrieben wird, die nicht blockierende IO-Operationen ausführen können.

  3. Selector – Wir können Selektoren verwenden, um nicht blockierende IO-Operationen durchzuführen. Ein Selektor (ein Objekt) überwacht mehr als einen Kanal auf die Ereignisse.

Wir können sagen, dass Selektoren die Kanäle auswählen, die bereit sind, Input/Output-Operationen durchzuführen.

Verwendung von das NIO-Paket zum Lesen und Schreiben in eine Datei in Java

Das Folgende ist die grafische Darstellung verschiedener Klassen, die verwendet werden können, um verschiedene Operationen auszuführen.

Einführung in das Java-Nio-Paket - Klassen

Sie können hier ausführlich über java.nio lesen, aber wir konzentrieren uns in diesem Tutorial auf das Lesen von Dateien und das Schreiben in dateibezogene Operationen; siehe die folgenden Beispiele.

Beispielcode (zum Lesen aus einer Datei):

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class readFromFile {
  public static void main(String[] args) {
    Path filePath = Paths.get("file.txt");
    Charset charSet = Charset.forName("ISO-8859-1");

    try {
      List<String> lines = Files.readAllLines(filePath, charSet);
      for (String line : lines) {
        System.out.println(line);
      }
    } catch (IOException e) {
      System.out.println(e);
    }
  }
}

Beispielcode (zum Schreiben in eine Datei):

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class writeToFile {
  public static void main(String[] args) {
    Path filePath = Paths.get("file.txt");
    String message = "We have overwritten the file";
    Charset charSet = Charset.forName("ISO-8859-1");

    try {
      Files.write(filePath, message.getBytes());
      List<String> lines = Files.readAllLines(filePath, charSet);
      for (String line : lines) {
        System.out.println(line);
      }
    } catch (IOException e) {
      System.out.println(e);
    }
  }
}

Ausgabe (aus einer Datei lesen und in eine Datei schreiben):

Einführung in das Java-nio-Paket - Ausgabe

Wir lesen Daten aus der angegebenen Datei und geben sie auf der Befehlszeile im ersten Code-Snippet aus. Im zweiten Codebeispiel schreiben wir die Daten (eine kleine Zeichenfolge) in die angegebene Datei und geben sie auf dem Bildschirm aus, um zu sagen, was in die Datei geschrieben wird.

Im ersten Beispielcode nennen wir die Methode Paths.get() die Factory-Methode für die Instanz Path. In einfachen Worten können wir sagen, dass es eine Path-Instanz erstellt, wenn wir die statische Methode namens get() der java.nio.file.Paths-Klasse aufrufen.

Diese Methode nimmt entweder eine Folge von Strings (diese Strings werden zu einem Pfad verbunden) oder einen String als Parameter und wandelt ihn in die Path-Instanz um. Es löst InvalidPathException aus, wenn illegale Zeichen in der übergebenen Zeichenfolge enthalten sind.

Wie File kann sich java.nio.file.Path entweder auf einen relativen oder einen absoluten Pfad innerhalb des Dateisystems beziehen.

Charset wird für die Zeichencodierung verwendet. Wir verwenden die Zeichenkodierung ISO-8859-1, aber Sie können UTF-8 oder eine andere Zeichencodierung angeben, die Sie verwenden möchten.

Die Methode readAllLines() liest eine Textdatei Zeile für Zeile. Wir speichern die gelesenen Daten in einer Liste von String (siehe Code).

Außerdem verwenden wir eine for-Schleife, um alle gelesenen Zeilen auf dem Bildschirm anzuzeigen.

Im zweiten Codebeispiel ist die gesamte Logik bis auf diese Codezeile gleich.

Files.write(filePath, message.getBytes());

Die File.write() ist eine statische Methode des Java-Pakets NIO, die zum Schreiben in die angegebene Datei verwendet wird.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook