Espansione Java memory-mapped Byte Buffer
-
26-09-2019 - |
Domanda
C'è un modo per espandere il byte memory-mapped Java tampone in modo tale che la nuova dimensione viene riflessa indietro al file mappato sul disco?
Soluzione
No, sarà necessario regolare la dimensione del file sottostante e ricreare la memoria mappata Byte Buffer.
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());
Nota: L'impostazione della lunghezza file ha un comportamento un po 'strano. Se si scrive per il file tramite la mappa in una posizione specifica che è oltre la fine del file (sia tramite map.position () o map.putX (posizione, ...)) i valori verranno aggiunti alla fine di il file e non scritte nella posizione che ci si aspetta (su linux, almeno). Se questo è un comportamento indesiderato è necessario per aggiungere dati al file, al fine di far crescere realmente il file.