FileUtils.readFileToByteArray jogando java.lang.OutOfMemoryError: Java heap erro de espaço
-
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));
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();