Heim Java javaLernprogramm Java NIO-Tutorial

Java NIO-Tutorial

Nov 26, 2016 am 09:51 AM
java nio

NIO ist die Abkürzung für New I/O. Um die wahre Bedeutung zu verstehen, muss man sich viel Wissen aneignen. Ich habe mir große Mühe gegeben, das gesamte io in diesen Notizen zu skizzieren. Wir ebnen den Weg für umfassendes Lernen für alle.

Eine kurze Geschichte von I/O

Um alle I/O zu verstehen, müssen Sie die I/O-Geschichte von Java verstehen. Die E/A-Geschichte von Java spiegelt unter einem Aspekt auch die Entwicklungsgeschichte von Java wider.

JDK1.0-1.3

In dieser Zeit von Java kann grundsätzlich gesagt werden, dass es keine vollständige I/O-Unterstützung gibt. Da Java-E/A-Vorgänge in diesem Zeitraum blockieren, ist die E/A-Effizienz relativ gering. Wenn Sie eine bessere E/A-Lösung wünschen, müssen Sie sich grundsätzlich auf sich selbst verlassen. In diesem Zeitraum wurde Java auf der Serverseite nicht wiederverwendet, was in hohem Maße auf die schlechte E/A-Effizienz zurückzuführen ist. Nicht nur die E/A wurde nicht gut gemacht, sondern auch eine Reihe peripherer Maßnahmen wurden nicht gut gemacht. Die unterstützten Zeichensatzkodierungen sind begrenzt und häufig sind manuelle Kodierungsarbeiten erforderlich. Und ohne reguläre Ausdrücke ist es sehr schwierig, Daten zu verarbeiten.

JDK1.4-1.6

In Java1.4, das 2002 veröffentlicht wurde, wurde der Java-Sprache nicht blockierende E/A als JSR-51 hinzugefügt. Gleichzeitig wurden die Kodierungs- und Dekodierungsfunktionen des Zeichensatzes erheblich verbessert. Und es gibt eine Klassenbibliothek für reguläre Ausdrücke, die auf Perl basiert. Gleichzeitig wurden auch einige der zugrunde liegenden Implementierungen der alten E/A mit neuen E/A-Methoden neu geschrieben, was die Leistung der alten E/A verbessert hat. Schließlich wurde Java auf der Serverseite populär.

Gleichzeitig begannen auch Dritte, ihre Anstrengungen zu unternehmen. Google hat die Guava-Klassenbibliothek veröffentlicht, deren E/A-Teil einige Dateivorgänge und die Datenübertragung erheblich vereinfacht. Gleichzeitig wurden auch die unter der Leitung von Trustin Lee geschriebenen Nio-Frameworks Netty und Mina weit verbreitet, was die Entwicklung von Java Nio erheblich vorangetrieben hat.

JDK1.7 wird vorgestellt

Mit der Einführung von JSR-203 sahen wir NIO2 in Java1.7. Es bietet uns leistungsfähigere asynchrone E/A-Betriebsfunktionen, die nicht blockieren, und bietet außerdem eine Reihe äußerst praktischer APIs für den Betrieb von Dateisystemen und Dateiattributen. Und leistungsfähigere Netzwerk-E/A

E/A-Unterschied

Was sind die Unterschiede zwischen blockierender E/A, nicht blockierender E/A und asynchroner E/A? Warum führt jede Weiterentwicklung zu einer großen Verbesserung der Java-I/O-Fähigkeiten? Nehmen wir ein Beispiel für ein Gemüseanbauspiel.

Angenommen, es gibt ein Spiel zum Gemüseanbau (ähnlich dem vorherigen QQ Farm). Nachdem der Spieler Gemüse angebaut hat, muss er auf dieser Webseite bleiben und zusehen, wie das Gemüse reift, bevor er es ernten kann. Dies ist eine enorme Zeitverschwendung und die Benutzererfahrung wird definitiv nicht gut sein. Dieses Spiel wurde später überarbeitet. Spieler müssen nach dem Pflanzen von Gemüse nicht mehr auf dieser Webseite bleiben. Wenn sie bei einer bestimmten Überprüfung feststellen, dass das Gemüse reif ist, können sie es ernten . Natürlich wurde das Benutzererlebnis erheblich verbessert und auch die Zeitverschwendung der Benutzer wurde reduziert. Um das Benutzererlebnis jedoch weiter zu verbessern, wurde das Spiel überarbeitet. Nachdem der Spieler Gemüse gepflanzt hat, muss er nicht mehr prüfen, ob das Gemüse reif ist. Wenn das Gemüse reif ist, sendet das Spiel automatisch eine Benachrichtigung an den Benutzer und teilt ihm mit, dass das Gemüse reif ist und er es schnell abholen sollte . Auf diese Weise müssen Benutzer grundsätzlich keine Zeit mehr verschwenden.

Die drei Spielversionen im Beispiel repräsentieren lediglich drei Arten von I/O. Blockierende E/A: Die CPU kann nicht mit dem nächsten Vorgang fortfahren, bis die Daten gelesen und geschrieben wurden, sodass die CPU keine andere Wahl hat, als dort zu warten. Nicht blockierende E/A: Die CPU kann den Vorgang verlassen, bevor die Daten gelesen oder geschrieben werden, und muss nur ab und zu abgefragt werden. Asynchrone E/A: Bevor die Daten gelesen und geschrieben werden, kann die CPU sie verlassen, ohne sich von Zeit zu Zeit um E/A kümmern zu müssen. Wenn die Daten gelesen und geschrieben werden, wird die CPU aktiv benachrichtigt. Die Effizienz zwischen den drei I/O-Typen kann danach beurteilt werden, ob sie hoch oder niedrig ist.

Neue E/A

Nehmen wir die von Java1.4 vorgeschlagene nicht blockierende E/A als Ausgangspunkt und beginnen, das Gesamtbild zu verstehen.

Kanäle

Puffer

Selektoren

Diese drei Klassen bilden die Kern-API für nicht blockierende E/A.

Puffer wird als Pufferbereich übersetzt, bei dem es sich um einen Speicherbereich handelt, der Daten speichern kann. Der Kanal ist ein bisschen wie ein Stream, kann aber vom lokalen E/A zum Netzwerk-E/A gelesen und geschrieben werden. Die meisten NIO-Daten können vom Kanal in den Puffer gelesen oder aus dem Puffer geschrieben werden . zum Kanal.

Java NIO-Tutorial

Bei nicht blockierender E/A kann die CPU gehen, bevor die Daten gelesen oder geschrieben werden, und sie muss nur ab und zu abgefragt werden. Die Frage, ob die Daten gelesen und geschrieben wurden, erfordert nur minimale CPU-Leistung. Wenn die CPU jedoch häufig die Aufgabe wechselt, ist die zum Beibehalten und Wiederherstellen der Szene erforderliche Zeit groß. Sie können also einfach einen Thread verwenden, um zu fragen, ob die Daten bereit sind. Wenn ein Thread fragt, ob die Daten in mehreren Kanälen bereit sind, muss er mehrere Kanäle verwalten. Dies ist

Java NIO-Tutorial

Um Selector zu verwenden, müssen Sie den Kanal bei Selector registrieren und dann Rufen Sie die Methode select() auf. Diese Methode blockiert, bis für einen registrierten Kanal ein Ereignis bereit ist. Sobald diese Methode zurückkehrt, kann der Thread diese Ereignisse verarbeiten.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

See all articles