2011-01-19 16 views
7

C'è un API di lettura file non bloccante in java? In caso contrario, sarebbe saggio crearne uno in C++ e chiamarlo da un'app java tramite JNI?Letture file non bloccanti

+0

Per cosa si desidera utilizzarlo? – Elalfer

+0

File IO all'interno di un MDB. – TheWolf

+0

Cosa c'è di sbagliato nell'usare un modello di blocco? –

risposta

6

No, FileChannel non si estende SelectableChannel.

Probabilmente perché non tutti i sistemi operativi lo supportano.

Windows fa, e in teoria è possibile scrivere una libreria C++ specifica per Windows e chiamarla tramite JNI, ma è molto lavoro da integrare con java.nio.

Preferirei che un thread di lavoro copi il contenuto del file su un pipe e faccia letture non bloccanti sull'altra estremità della pipe.

23

La mia risposta originale è ora sbagliata, dal momento che l'aggiunta di AsynchronousFileChannel in Java 7.

non è ancora possibile select su un file, ma ora ci sono due metodi di leggere il file asincrona: uno che prende un callback e another che restituisce un Future.

Potrebbe essere più pulito utilizzare il metodo di richiamata (e inviare un evento dal callback) piuttosto che disporre di un thread dedicato che esegue il polling di una pipe.

+3

Tuttavia, l'asincrono non è lo stesso del blocco. In effetti operazioni di I/O asincrone [usano un pool di thread obbligatorio] (https://docs.oracle.com/javase/7/docs/api/java/nio/channels/AsynchronousChannelGroup.html) dove l'IO non bloccante ovviamente non lo fa t. – RecursiveExceptionException

Problemi correlati