Dúvida NIO

4 respostas
B

Pessoal,

Estou tentando fazer uma classe utilitária para manipular aquivos utilizando NIO.

Minha dúvida está no código abaixo:

FileReader reader = new FileReader(file);
CharBuffer buffer = CharBuffer.allocate((int)file.size());

O que acontece se o valor de file.size() for realmente um long? Não vai dar algum erro bizarro caso eu esteja manipulando um arquivo muito grande, já que o java vai se perder na conversão do número para int?

Obrigado.

4 Respostas

T

O erro bizarro vai dar na hora de você tentar alocar tanta memória virtual para o CharBuffer. (Estou supondo que você está usando um computador Intel de 32 bits )
Nem tente usar esse seu código para abrir um arquivo de 2GB, por exemplo (acho que nem um arquivo de 1.7 GB você vai conseguir abrir :frowning: )

KWill

Acho que poucos são tolos a ponto de quererem mapear todo o arquivo na memória, a menos que se tenha o controle de um limite para o tamanho desse arquivo.

É melhor definir um Buffer de tamanho fixo e aí ir fazendo as suas operações de I/O com ele.

Inté.

B

Como ficaria meu código para que se comportasse de maneira escalável e pudesse abrir arquivos maiores sem problemas?

Tb não gostaria que meu código ficasse igual ao java.io antigo… usando streams ao invés de blocks.

Se alguém puder postar um código que faz isso aí…

Valeu!

rafaelt

Bjornn Borg você parece conhecer a NIO, então se puder me responde como que eu posso fazer para enviar um arquivo para um web server com essa biblioteca??? Considerando que estou montando um Applet e máquinas clientes vão entrar nesse applet para upar arquivos no servidor web que este applet se encontra.

Criado 12 de dezembro de 2006
Ultima resposta 13 de dez. de 2006
Respostas 4
Participantes 4