Voici en fait trois questions sur la façon de travailler avec des fichiers mappés en mémoire. Ce que j'ai fait fonctionne, mais il me manque une réponse faisant autorité.Redimensionner, rincer et fermer ByteBuffer
obtenir mon ByteBuffer
aime suit:
raf = new RandomAccessFile(file, isReadonly ? "r" : "rw");
channel = raf.getChannel();
buffer = channel.map(mode, 0, channel.size());
Pour le redimensionnement, ce qui suit semble fonctionner
raf.setLength(newLength);
channel = raf.getChannel();
sans appeler raf.getChannel()
, mais est-il vraiment bon?
Selon le Javadoc, appelant force
devrait rincer (j'utilise un lecteur local). Je me demande simplement comment il se fait qu'il ne déclare pas IOException
et ce qui se passe si elle échoue?
Que dois-je fermer? Le RandomAccessFile
, le FileChannel
, ou les deux? Dois-je appeler flush
ou MappedByteBuffer.force
avant?