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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top