Der E/A-Stream von Java ist die Grundlage für die Implementierung von Eingabe-/Ausgabevorgängen. Verschiedene Eingabe-/Ausgabequellen werden in Java abstrakt ausgedrückt.
Ein Stream ist eine Menge geordneter Bytes und ein allgemeiner Begriff oder eine Abstraktion für die Datenübertragung.
Streams haben Eingabe und Ausgabe. Bei der Eingabe fließt der Stream von der Datenquelle zum Programm. Bei der Ausgabe wird der Stream vom Programm an die Datenquelle übertragen. Die Datenquelle kann Speicher, Datei, Netzwerk oder Programm usw. sein.
Benutzerprozess und Betriebssystemkernel
IO in Java kann als zwischen dem Java-Programm und dem Betriebssystemkernel stehend verstanden werden zwischen Objekten.
Das später erwähnte Blockieren und Nichtblockieren, Synchronisieren und Asynchronisieren sind das Ergebnis der Interaktion zwischen diesen beiden Objekten. In diesem Artikel bezieht sich der Benutzerprozess auf das Java-Programm.
Programmraum und Kernelraum
Warten, bis die Daten bereit sind (Warten, bis die Daten im Kernelpuffer ankommen)
Kopieren der Daten vom Kernel zum Prozess (Daten vom Kernel-Puffer in den Programmpuffer kopieren)
Unter Linux werden die Daten bei einem Lese-E/A-Vorgang nicht direkt in den Programmpuffer des Programms kopiert.
Es wird zuerst in den Puffer des Betriebssystemkernels kopiert und dann vom Puffer des Betriebssystemkernels in den Puffer der Anwendung kopiert.
Programmspeicherplatz: der den Benutzerprogrammen zugewiesene Speicherplatz.
Kernelraum: Der Speicherplatz, der dem Kernel gehört.
Blockierend und nicht blockierend
Blockierung: Nachdem der Benutzerprozess einen Systemaufruf durchführt, ist der Benutzerprozess immer gesperrt und kann keine anderen Vorgänge ausführen
Nicht blockierend: Nachdem der Benutzerprozess einen Systemaufruf getätigt hat, ist der Benutzerprozess nicht gesperrt und kann andere Vorgänge ausführen
Blockieren und Nichtblockieren beziehen sich auf den Status des Benutzerprozesses, dh darauf, ob der Benutzer Prozess ist gesperrt
Synchron und asynchron
Eine synchrone E/A-Operation führt dazu, dass der anfordernde Prozess blockiert wird, bis diese E/A-Operation abgeschlossen ist.
Eine asynchrone Der E/A-Vorgang führt nicht dazu, dass der anfordernde Prozess blockiert wird.
Ein synchroner E/A-Vorgang führt dazu, dass der anfordernde Prozess blockiert wird, bis der E/A-Vorgang abgeschlossen ist. Ein asynchroner E/A-Vorgang führt nicht dazu, dass der anfordernde Thread blockiert wird.
Synchronisation: Der Benutzerthread und der Io-Thread machen dasselbe (der Benutzerthread ist blockiert und wartet darauf, dass der Kernel das Verarbeitungsergebnis zurückgibt)
Asynchron: Der Benutzerthread und der Io Thread macht verschiedene Dinge (der Benutzer-Thread ist nicht blockiert, er führt andere Dinge aus, die Kernel-Verarbeitung wird abgeschlossen und das Ergebnis wird an den Benutzer-Thread gesendet)
Dateideskriptor
Unter Linux ist alles eine Datei. Ein Dateideskriptor ist ein vom Kernel erstellter Index für eine Datei. Alle E/A-Vorgänge werden durch Aufrufen des Dateideskriptors (Index) ausgeführt, einschließlich des unten erwähnten Sockets. Beim ersten Start von Linux wird automatisch 0 als Standardeingabe, 1 als Standardausgabe und 2 als Standardfehler festgelegt.
Das obige ist der detaillierte Inhalt vonWarum ist Java io wichtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!