Java NIO-Tutorial
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.
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
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.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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

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

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.

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

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.

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

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.

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
