FileUtils.readFileToByteArray werfen java.lang.OutOfMemoryError: Java Heap-Speicher Fehler

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

  •  06-07-2019
  •  | 
  •  

Frage

Ich bin mit Apache Commons IO FileUtils Dienstprogramm eine Datei in ein Byte-Array zu lesen. Die Datei ist 1,13 Gigabyte groß. Jedesmal, wenn diese Methode aufgerufen wird, erhalte ich eine außerhalb des Speicherfehler. Ich habe diese auf einem Windows Server 2008 64-Bit-Server mit 8 GB Speicher. Das erste Mal, dass ich diesen Fehler bekam, öffnete ich das Tomcat 6 Konfigurationsprogramm auf und stellen Sie den ursprünglichen Speicher auf 1024 und der maximalen Speicher-Pool zu 2048. Ich habe auch seit versucht, 3072 und 4096 für den maximalen Speicher-Pool. Jedes Mal, neu gestartet ich den Tomcat-Dienst, damit die Änderungen nehmen würden. Keine dieser Änderungen fixiert diesen Fehler. Warum? Ich bin mit Java 1.6 Update 14

attachment.setData(FileUtils.readFileToByteArray(attachmentFile));
War es hilfreich?

Lösung

Das Codebeispiel unten mein Problem gelöst. Ich bin mir nicht ganz sicher, warum aber, weil ich die Pufferlänge auf die Länge der Datei gesetzt, so sehe ich nicht, wie dies anders sein würde als readFileToByteArray. Ich konnte sehen, wenn ich die Pufferlänge etwas kleiner als die Datei.

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

bis.read(buffer);

fis.close();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top