Comment faire pour annuler le mappage d'un fichier à partir de la mémoire mappée à l'aide de FileChannel en java?

Je suis le mappage d'un fichier("sample.txt") de la mémoire à l'aide FileChannel.map() et la fermeture de la chaîne à l'aide d' fc.close(). Après cela, quand j'écris dans le fichier à l'aide de FileOutputStream, j'obtiens l'erreur suivante:

java.io.FileNotFoundException:
de l'échantillon.txt (L'opération demandée
ne peut pas être formé par sur un fichier avec une
mappée utilisateur ouverture de la section)

File f = new File("sample.txt");
RandomAccessFile raf = new RandomAccessFile(f,"rw");
FileChannel fc = raf.getChannel();
MappedByteBuffer mbf = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
fc.close();
raf.close();

FileOutputStream fos = new FileOutputStream(f);
fos.write(str.getBytes());
fos.close();

Je suppose que cela peut être dû à un fichier d'être liés à la mémoire, même après que j'ai fermer la FileChannel. Suis-je le droit?. Si oui, comment puis-je "détacher" le fichier de la mémoire?(Je ne trouve pas toutes les méthodes de l'API).
Merci.

Edit:
Dirait qu'il(l'ajout d'un unmap méthode) a été présenté comme RFE de soleil il y a quelque temps:
http://bugs.sun.com/view_bug.do?bug_id=4724038

  • J'ai frappé le même problème douloureusement. Dans mon cas, j'ai essayé de mapper des milliers de fichiers dans la mémoire et il en résulte OutOfMemoryError, qui, je crois, est le résultat de l'épuisement des gestionnaires de fichiers. N'ayant aucun instrument pour annuler le mappage d'conduit à unpredictive comportement, même si la carte va essayer de sleep(100) & System.gc() sur OutOfMemoryError − il reporte les convulsions.
InformationsquelleAutor learner135 | 2010-06-04