FileUtils.readFileToByteArray arrojando java.lang.OutOfMemoryError: error de espacio de almacenamiento dinámico de Java

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Estoy usando la utilidad Apache Commons IO FileUtils para leer un archivo en una matriz de bytes. El archivo tiene un tamaño de 1,13 gigabytes. Cada vez que se llama a este método, aparece un error de falta de memoria. Tengo esto ejecutándose en un servidor Windows Server 2008 de 64 bits con 8 GB de memoria. La primera vez que recibí este error, abrí la utilidad de configuración de Tomcat 6 y configuré la memoria inicial en 1024 y el conjunto de memoria máxima en 2048. Desde entonces he probado también 3072 y 4096 para el conjunto de memoria máxima. Cada vez, reiniciaba el servicio Tomcat para que los cambios tomaran. Ninguno de estos cambios solucionó este error. ¿Por qué? Estoy usando Java 1.6 actualización 14.

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

Solución

El siguiente código de ejemplo resolvió mi problema. Sin embargo, no estoy exactamente seguro de por qué, porque configuré la longitud del búfer a la longitud del archivo, así que no veo cómo esto sería diferente de readFileToByteArray. Podría ver si configuro la longitud del búfer en algo más pequeño que el archivo.

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

bis.read(buffer);

fis.close();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top