Erro ao mapear um FileChannel

4 respostas
netoSJB

Bom povo,

Se eu coloco pra mapear um arquivo pequeno, mais especificamente até 864.616.448 bytes (sim eu testei até com quantos bytes isso funciona)
vai de boa, agora seu eu boto algo acima disso da a seguinte exceção:

Código:

in.map(FileChannel.MapMode.READ_ONLY, 0, 864616449);

[color=red]Exception in thread “main” java.io.IOException: Map failed
at sun.nio.ch.FileChannelImpl.map(Unknown Source)[/color]

Aguem sabe porque tem esse limite? na documentação diz que o limite é Integer.MAX_VALUE que é no caso 2^31-1 = 2.147.483.647(segundo minha HP12C)

resumindo meu problema eu quero abrir e mapear na memória um arquivo de 1.2Gb;

4 Respostas

E

Isso é no Windows? É que para um mapped file funcionar (acho que é a API MapViewOfFile ou coisa parecida), é preciso criar um segmento de memória desse tamanho. Provavelmente o Windows não está conseguindo criar um segmento de memória desse tamanho e acaba devolvendo um erro ao Java.

netoSJB

Sim é no win :confused: tem alguma outra sugestão pra manipular arquivos grandes como esse de 1.2gb? eu preciso ler e escrever nesse arquivo.

E

É possível simplesmente usar um RandomAccessFile?

netoSJB

Opa, com o RandomAccessFile funcionou de boa :slight_smile:

Eu estava usando o FileChannel pois dizem que a performace é melhor, pra manipulação de arquivos grande isso faz uma grande diferença, vo usa o RandomAccess por enquanto, mas vou deixar o tópico aberto, caso alguem apresente outra solução, valeu.

Criado 6 de outubro de 2010
Ultima resposta 6 de out. de 2010
Respostas 4
Participantes 2