Tuesday, September 21, 2010

gestión de la memoria a través de ficheros

Realizando el mantenimiento de una aplicación, que utiliza un fichero temporal para la copia entre directorios de un FTP, he descubierto un método para mejorar el proceso sin crear ficheros temporales.  Esto es el NIO. Para mí completamente nuevo, pero por lo que he podido leer esta disponible desde la versión 1.4 de JVM.

Con NIO puedes utilizar la memoria como si fuera un fichero. Ya no tienes por que que crearte un byte buffer[], simplemente usas un fichero que se mapea en la memoria, en mi caso lectura y escritura, y te mueves por su contenido, y puedes ir realizando marcas leyendo datos escribiendo, etc.

static int length = 0x01FFFFFF; 

MappedByteBuffer inOut = new RandomAccessFile("fileMemory.dat", "rw").getChannel().map(FileChannel.MapMode.READ_WRITE, 0, length);


//Borra la zona de memoria
inOut.clear();

DataInputStream dis = new DataInputStream(...);

while (dis.available() != 0) {
    inOut.put(dis.readByte());
}
inOut.rewind();//pone el puntero del fichero al inicio

for(;contadorBufferFichero>0;contadorBufferFichero--) {
    dos.writeByte(inOut.get());
}

No comments:

Post a Comment