FileUtils.readFileToByteArray renvoyant java.lang.OutOfMemoryError: erreur d'espace de segment de mémoire Java

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

  •  06-07-2019
  •  | 
  •  

Question

J'utilise l'utilitaire Apache Commons IO FileUtils pour lire un fichier dans un tableau d'octets. Le fichier a une taille de 1,13 gigaoctet. Chaque fois que cette méthode est appelée, je reçois une erreur de mémoire insuffisante. Je l’utilise sur un serveur Windows Server 2008 64 bits avec 8 Go de mémoire. La première fois que j'ai eu cette erreur, j'ai ouvert l'utilitaire de configuration Tomcat 6, défini la mémoire initiale à 1024 et le pool de mémoire maximale à 2048. Depuis, j'ai également essayé 3072 et 4096 pour le pool de mémoire maximale. À chaque fois, j'ai redémarré le service Tomcat pour que les modifications prennent. Aucune de ces modifications n'a corrigé cette erreur. Pourquoi? J'utilise Java 1.6 update 14.

attachment.setData(FileUtils.readFileToByteArray(attachmentFile));
Était-ce utile?

La solution

L'exemple de code ci-dessous a résolu mon problème. Cependant, je ne sais pas trop pourquoi, parce que j'ai défini la longueur du tampon sur la longueur du fichier, je ne vois donc pas en quoi celle-ci serait différente de celle de readFileToByteArray. Je pourrais voir si je règle la longueur du tampon sur quelque chose de plus petit que le fichier.

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

bis.read(buffer);

fis.close();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top