FileUtils.readFileToByteArray jogando java.lang.OutOfMemoryError: Java heap erro de espaço

StackOverflow https://stackoverflow.com/questions/1625316

  •  06-07-2019
  •  | 
  •  

Pergunta

Estou usando o utilitário Apache Commons IO FileUtils para ler um arquivo em um array de bytes. O arquivo é 1,13 gigabytes de tamanho. Cada vez que este método é chamado, eu recebo um erro de falta de memória. Eu tenho esta rodando em um servidor de 64 bits do Windows Server 2008 com 8GB de memória. A primeira vez que eu tenho esse erro, eu abri o utilitário de configuração 6 Tomcat e definir a memória inicial para 1024 e o pool de memória máxima para 2048. Tenho visto que tentaram 3072 e 4096 para o pool de memória máxima também. Cada vez, eu reiniciado o serviço Tomcat para que as alterações levaria. Nenhuma dessas mudanças corrigido este erro. Por quê? Eu estou usando Java 1.6 update 14.

attachment.setData(FileUtils.readFileToByteArray(attachmentFile));
Foi útil?

Solução

O exemplo de código abaixo resolveu o meu problema. Eu não sei exatamente por que, porque eu definir o tamanho do buffer para o tamanho do arquivo, então eu não vejo como isso seria diferente do que readFileToByteArray. Eu podia ver se eu definir o tamanho do buffer para algo menor do que o arquivo.

FileInputStream fis = new FileInputStream(attachmentFile);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buffer = new byte[(int)attachmentFile.length()];

bis.read(buffer);

fis.close();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top