Tengo que leer/escribir archivos directamente, sin ningún almacenamiento en búfer. En la antigua forma de C, hice esto mediante el uso de un método abierto con el indicador O_DIRECT
.¿Cómo leer/escribir directamente el archivo desde y hacia el dispositivo (como el efecto del indicador O_DIRECT) de forma Java?
¿Es esto posible de forma Java?
Aquí es O_DIRECT
Descripción
tratar de minimizar los efectos de caché de E/S hacia y desde este archivo. En en general, esto degradará el rendimiento, pero es útil en situaciones especiales , como cuando las aplicaciones hacen su propio almacenamiento en caché. La E/S de archivo se realiza directamente a/desde búferes de espacio de usuario.
ACTUALIZADO:
Aquí está mi ejemplo de código,
// write
fos = new FileOutputStream(fileName);
fos.write(inputData);
fos.flush();
fos.close();
// read
fis = new FileInputStream(fileName);
int len = fis.read(outputData, offset, length);
fis.close();
El fondo fue que escribí de datos (en realidad, el mando) a un archivo en la tarjeta SD (una especie de tarjeta inteligente) , entonces la tarjeta inteligente recibió el comando y el resultado preparado para el mismo archivo. Normalmente, puedo leer los datos (resultados) de ese archivo, pero obtuve los mismos inputData
y outputData
, es decir, acabo de recibir mi comando. Ese es un resultado inesperado. Estoy sospechando si el código solo escribió/leyó desde y hacia un búfer, no el archivo real. Flush no funcionó.
Si no le molesta la lentitud, puede usar 'FileOutputStream' desnudo, que es prácticamente el nivel más bajo, sin almacenamiento en búfer. Por supuesto, tendrás que convertir todo en 'byte []' o 'byte', pero parece que es lo que quieres hacer. – nhahtdh
Es probable que pueda hacer esto con el ndk, pero ¿por qué? –
@Chris Stratton, seguro que sé que podría hacerlo NDK y jni, pero prefiero hacerlo en Java porque es conveniente para la depuración y me gustaría saber si es posible – fifth