Nicht blockierende Datei wird gelesen

7

Gibt es in Java eine nicht blockierende Dateilese-API? Wäre es nicht klug, einen in C ++ zu erstellen und ihn über JNI von einer Java App aus aufzurufen?

    
TheWolf 19.01.2011, 20:24
quelle

2 Antworten

6

Nein, FileChannel erweitert SelectableChannel nicht.

Wahrscheinlich, weil nicht alle Betriebssysteme es unterstützen.

Windows tut, und theoretisch könnten Sie eine Windows-spezifische C ++ - Bibliothek schreiben und sie über JNI aufrufen, aber es ist eine Menge Arbeit, dies mit java.nio zu integrieren.

Ich hätte lieber einen Worker-Thread, der den Inhalt der Datei in ein kopiert Pipe und führe nicht blockierende Lesevorgänge am anderen Ende der Pipe durch.

    
finnw 19.01.2011, 20:53
quelle
23

Meine ursprüngliche Antwort ist nun falsch, seit AsynchronousFileChannel in Java 7.

Sie können noch immer nicht auswählen > in einer Datei, aber es gibt jetzt zwei asynchrone Datei-Lese-Methoden: eine, die eine Rückruf und andere , die ein %Co_de% .

Es kann sauberer sein, die Callback-Methode zu verwenden (und ein Ereignis aus dem Callback zu senden), als dass ein dedizierter Thread eine Pipe abfragt.

    
finnw 16.10.2011 20:09
quelle

Tags und Links