Pregunta

Estoy en el proceso de hacer algunos cambios en una biblioteca que estoy usando. Con el fin de reducir el uso de memoria de la biblioteca está escribiendo sus datos temporales en el disco en lugar de mantenerlo en la memoria. Sin embargo, para mi escenario de uso es más eficiente para mantenerlo en la memoria. También tiene algunos problemas de concurrencia, ya que tiene los nombres de sus constantes temporales-archivos y por lo tanto no se puede ejecutar simultáneamente en diferentes hilos (debido a que los hilos se corromperán los datos de cada uno).

Por lo tanto, tengo que cambiar la biblioteca de manera que mantiene todos sus datos en la memoria en su lugar. No he escrito originalmente la biblioteca y por lo tanto no estoy muy cómodo con hacer cambios drásticos en el código. Por lo tanto, me gustaría hacer esto con tan poco como sea posible refactorización. El código que escribe en el disco es bastante simple. Aquí hay una (algo simplificada) ejemplo:

final FileChannel fileChannel = this.randomAccessFile.getChannel();
fileChannel.position(calculatePosition());
while (blockData.hasRemaining())
{
 fileChannel.write(blockData);
}

La lectura de un bloque es muy similar (es decir, se utiliza un FileChannel, que se pone de un RandomAccessFile).

Se siente como la solución más fácil sería si puedo usar alguna implementación de FileChannel, que se asigna a un lugar en la memoria en lugar de en un archivo. Sé que puedo convertir un archivo a un lugar en la memoria usando el método de mapa-FileChannel. Sin embargo, esto es a la inversa. Eso me da una "memoria-API" en un archivo. Quiero una interfaz FileChannel contra la parte de la memoria. ¿Hay algunas implementaciones disponibles de este?

¿Fue útil?

Solución

Java 7 permitirá a los sistemas de archivos enchufables, por lo que será capaz de utilizar un sistema de archivos basado en memoria y mantener el API FileChannel actual. A falta de eso es muy probable que tenga que cambiar la API se utiliza para Commons-VFS como Adrian sugiere el uso de memoria o únicas estructuras.

Otros consejos

Tal vez se puede utilizar un sistema de archivos en memoria, como Apache Commons VFS .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top