Errores de E / S utilizando archivos asignados de memoria en Java

Estoy usando archivos mapeados de memoria en algún código Java para escribir rápidamente en un archivo 2G. Estoy mapeando todo el archivo en la memoria. El problema que tengo con mi solución es que si el archivo en el que estoy escribiendo desaparece misteriosamente o el disco tiene algún tipo de error, esos errores no aparecen en el código Java.

De hecho, desde el código Java, parece que mi escritura se completó con éxito. Aquí está la prueba unitaria que creé para simular este tipo de falla:

File twoGigFile = new File("big.bin");
RandomAccessFile raf = new RandomAccessFile(twoGigFile, "rw");
raf.setLength(Integer.MAX_VALUE);
raf.seek(30000); // Totally arbitrary
raf.writeInt(42);
raf.writeInt(42);

MappedByteBuffer buf = raf.getChannel().map(MapMode.READ_WRITE, 0, Integer.MAX_VALUE);
buf.force();
buf.position(1000000); // Totally arbitrary
buf.putInt(0);

assertTrue(twoGigFile.delete());

buf.putInt(0);
raf.close();

Este código se ejecuta sin ningún error en absoluto. Esto es un gran problema para mí. Parece que no puedo encontrar nada por ahí que hable sobre este tipo de problema. ¿Alguien sabe cómo obtener archivos de memoria asignados para lanzar correctamente las excepciones? ¿O si hay otra forma de garantizar que los datos se escriban realmente en el archivo?

Estoy tratando de evitar usar un RandomAccessFile porque son mucho más lentos que los archivos asignados en memoria. Sin embargo, puede que no haya otra opción.

Respuesta 1

Estoy tratando de completar una tarea para la universidad. He hecho la mayor parte del código y, por lo que puedo decir, debería funcionar. Sin embargo, sigo recibiendo un error. No estoy realmente seguro de qué ...

Voy a tener alrededor de 10 o incluso más solicitudes de publicación http en mi aplicación de Android, la mayoría de ellas son de muy poco tiempo. Según tengo entendido, no puedo realizar ninguna operación de red en mi subproceso de interfaz de usuario. Los ...

Estoy probando, tratando de escribir el contenido de la consola en el archivo, pero cuando ejecuto la aplicación, el archivo de texto que se generó está vacío. Quiero que el usuario ingrese algunos detalles cuando el usuario haya terminado de ingresar ...

El código que he escrito a continuación no verifica si el valor que estoy buscando está allí en el último nodo. ¿Cómo verifico el último valor del nodo? búsqueda pública vacía (valor int) {Nodo nodo = cabeza; ...