FileUtils.readFileToByteArray lanciando java.lang.OutOfMemoryError: errore spazio heap Java

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

  •  06-07-2019
  •  | 
  •  

Domanda

Sto usando l'utilità FileUtils IO di Apache Commons per leggere un file in un array di byte. Il file ha una dimensione di 1,13 gigabyte. Ogni volta che viene chiamato questo metodo, viene visualizzato un errore di memoria esaurita. Ho questo in esecuzione su un server a 64 bit di Windows Server 2008 con 8 GB di memoria. La prima volta che ho riscontrato questo errore, ho aperto l'utilità di configurazione Tomcat 6 e impostato la memoria iniziale su 1024 e il pool di memoria massimo su 2048. Da allora ho provato anche 3072 e 4096 per il pool di memoria massimo. Ogni volta, ho riavviato il servizio Tomcat in modo che le modifiche fossero necessarie. Nessuna di queste modifiche ha corretto questo errore. Perché? Sto usando Java 1.6 aggiornamento 14.

attachment.setData(FileUtils.readFileToByteArray(attachmentFile));
È stato utile?

Soluzione

Il seguente esempio di codice ha risolto il mio problema. Non sono esattamente sicuro del perché, perché ho impostato la lunghezza del buffer sulla lunghezza del file, quindi non vedo come questo sarebbe diverso da readFileToByteArray. Ho potuto vedere se ho impostato la lunghezza del buffer su qualcosa di più piccolo del file.

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

bis.read(buffer);

fis.close();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top