Question

Je suis en train de faire quelques changements à une bibliothèque que j'utilise. Afin de réduire l'utilisation de la mémoire de la bibliothèque est en train d'écrire ses données temporaires sur le disque au lieu de le garder en mémoire. Cependant, pour mon scénario d'utilisation, il est plus efficace de le garder en mémoire. Il a aussi quelques problèmes de concurrence, car il a des noms constants pour ses fichiers temporaires et ne peut donc pas fonctionner simultanément dans différents threads (car les threads de corruption des données de l'autre).

Je dois donc changer la bibliothèque afin qu'elle conserve toutes ses données en mémoire à la place. Je ne l'ai pas écrit à l'origine de la bibliothèque et je suis donc pas très à l'aise avec des changements drastiques au code. J'aimerais donc faire avec aussi peu que possible refactoring. Le code qui écrit sur le disque est assez simple. Voici une (peu simplifiée) par exemple:

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

La lecture d'un bloc est très similaire (à savoir, il utilise un FileChannel, qu'il obtient à partir d'un RandomAccessFile).

Il se sent comme la solution la plus simple serait si je peux utiliser une mise en œuvre de FileChannel, qui correspond à un lieu en mémoire au lieu de un fichier. Je sais que je peux mapper un fichier à un emplacement en mémoire en utilisant la carte méthode de FileChannel. Cependant, c'est l'inverse. Cela me donne une « mémoire-API » dans un fichier. Je veux un FileChannel interface contre une mémoire. Y a-t-il des implémentations disponibles de cela?

Était-ce utile?

La solution

Java 7 permettra les systèmes de fichiers connectables, vous serez en mesure d'utiliser un système de fichiers à base de mémoire et de garder l'API en cours de FileChannel. Court que vous êtes susceptible d'avoir à changer l'API que vous utilisez pour Commons-VFS comme Adrian suggère ou utiliser la mémoire que les structures.

Autres conseils

Peut-être que vous pouvez utiliser un système de fichiers en mémoire, tels que Apache Commons VFS .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top