Pergunta

Existe uma maneira de expandir o buffer de bytes com memória Java, de modo que o novo tamanho seja refletido de volta ao arquivo mapeado no disco?

Foi útil?

Solução

Não, você precisará ajustar o tamanho do arquivo subjacente e recriar o buffer de byte mapeado de memória.

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: A configuração do comprimento do arquivo tem algum comportamento um pouco estranho. Se você gravar no arquivo através do mapa em uma posição específica que está além do final do arquivo (usando map.position () ou map.putX (posição, ...)), os valores serão anexados ao final de o arquivo e não está escrito na posição que você espera (pelo menos no Linux). Se esse é um comportamento indesejado, você precisará anexar dados ao arquivo para realmente aumentar o arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top