L'expansion Java-mémoire mappée octet tampon
-
26-09-2019 - |
Question
Est-il possible d'étendre la mémoire tampon octet de mémoire mappée Java telle que la nouvelle taille se reflète dans le fichier mappée sur le disque?
La solution
Non, vous devez ajuster la taille du fichier sous-jacent et recréer la mémoire mappée octet tampon.
RandomAccessFile file = new RandomAccessFile(/* some file */);
MappedByteBuffer buffer = file.getChannel().map(MapMode.READ_WRITE, 0, file.length());
// Some stuff happens...
// adjust the size
file.setLength(newLength);
// recreate the memory mapped buffer
buffer = file.getChannel().map(MapMode.READ_WRITE, 0, file.length());
Note: Réglage de la longueur du fichier a un comportement un peu bizarre. Si vous écrivez au fichier via la carte à une position spécifique qui est au-delà de la fin du fichier (soit en utilisant map.position () ou map.putX (position, ...)) les valeurs seront ajoutées à la fin de le fichier et non écrit à la position que vous attendez (sur linux au moins). Si ce comportement est indésirable, vous devez ajouter des données au fichier afin de vraiment développer le fichier.