2011-01-19 30 views
7

¿Hay una API de lectura de archivo sin bloqueo en java? Si no, ¿sería prudente construir uno en C++ y llamarlo desde una aplicación java a través de JNI?Archivo sin bloqueo lee

+0

¿Para qué te gustaría usarlo? – Elalfer

+0

Archivo IO dentro de un MDB. – TheWolf

+0

¿Qué hay de malo con el uso de un modelo de bloqueo? –

Respuesta

6

No, FileChannel no se extiende SelectableChannel.

Probablemente porque no todos los sistemas operativos lo admiten.

Windows sí, y en teoría podría escribir una biblioteca de C++ específica de Windows y llamarla a través de JNI, pero es mucho trabajo integrar esto con java.nio.

Preferiría que un hilo de trabajo copiara el contenido del archivo a pipe y realice lecturas sin bloqueos en el otro extremo del tubo.

23

Mi respuesta original es ahora mal, ya que la adición de AsynchronousFileChannel en Java 7.

sigue sin poder select en un archivo, pero ahora hay dos métodos de lectura asíncrona de archivos: uno que toma un callback y another que devuelve un Future.

Puede ser más limpio utilizar el método de devolución de llamada (y enviar un evento desde la devolución de llamada) que tener un hilo dedicado sondeando una tubería.

+3

Asychronous no es lo mismo que no bloquear. De hecho, las operaciones de IO asíncronas [usan un grupo de hilos obligatorio] (https://docs.oracle.com/javase/7/docs/api/java/nio/channels/AsynchronousChannelGroup.html) donde obviamente no se bloquea IO obturador ' t. – RecursiveExceptionException