Frage

Es gibt mehrere qualitativ hochwertige Frameworks, die die Komplexität der NIO -basierten Netzwerkprogrammierung (Mina, Netty, Grizzly usw.) verbergen. Gibt es ähnliche Frameworks, die die NiO-basierte Programmierung von Dateisystemen vereinfachen?

Als Lernübung möchte ich beispielsweise eine mit Disketten gesicherte Karte basierend auf diesem (fantastischen!) Artikel implementieren: http://www.javaorld.com/javarld/jw-01-1999/jw-01-step.html.

War es hilfreich?

Lösung

Nein, aber...)

Aber das liegt daran, dass Javas Nio Filechannel und Zugeordneter Bytebuffer sind nicht annähernd so komplex oder schwer zu verstehen und zu verwenden wie das Netzwerk und Wähler Sachen java.nio.

Hier ist ein Beispiel für das Erstellen einer mit Diskette unterstützten Karte (in Nio-Land bekannt als "zugeordneter Bytepuffer"), der für Ihre Übung geeignet wäre:

File file = new File("/Users/stu/mybigfile.bin");
FileChannel fc = (new FileInputStream(file)).getChannel(); 
MappedByteBuffer buf = fc.map(MapMode.READ_WRITE, 0, file.length());

Sie können wie jeder andere auf den Puffer zugreifen Puffer. Die Daten bewegt sich auf magische und schnell zwischen Disk und Speicher, die alle von Java und dem zugrunde liegenden System des virtuellen Speicherverwaltungssystems des Betriebssystems verwaltet werden. Sie haben jedoch ein gewisses Maß an Kontrolle darüber. EG: Zugeordnete Bytebuffer's .force() ("Erzwingt alle Änderungen, die an dem Inhalt dieses Puffer vorgenommen werden, um in das Speichergerät zu schreiben, das die zugeordnete Datei enthält.") und .load() ("Lädt den Inhalt dieses Puffer in den physischen Speicher.") Ich habe diese nie persönlich gebraucht.

Andere Tipps

Zu dem Kommentar von @stu hinzuzufügen. Es ist erwähnenswert, dass Socket -Verbindungen nicht alle Daten auf einmal haben, sondern möglicherweise viele langsame Verbindungen unterstützen (ESP -Verbindungen, die geöffnet sind, aber noch keine Daten gesendet werden).

Für Dateien sind jedoch alle Daten gleichzeitig verfügbar und Sie müssen normalerweise nur einige Dateien gleichzeitig öffnen, um eine maximale Leistung zu erhalten (häufig eine gleichzeitig ist in Ordnung), wenn Sie Daten aus mehreren Laufwerken (selten) oder von aus laden Mehrere Server (sehr selten) oder mehrere Netzwerkschnittstellen (noch seltener) Sie können gleichzeitig auf einige Dateien zugreifen, die die Leistung verbessert. Selbst dann ist die Komplexität nicht hoch und Sie können einfach einen Thread für jede von Ihnen geladene Datei erstellen.

Die einzige Gelegenheit, bei der Dateien kompliziert sind, ist das Lesen von Protokolldateien. Diese komplizierte, da die Datei beim Lesen an Größe wachsen kann. Sie können das Ende der Dateien erreichen und später weitere Daten finden. Außerdem können Protokolldateien gedreht werden, was bedeutet, dass die geöffnete Datei nicht mehr die gewünschte Datei ist. Trotzdem ist dies nicht sehr schwer zu handhaben und eine ziemlich seltene Voraussetzung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top