Bonjour,
je fais un serveur http en java et il est plutôt fonctionnel dans l'envoi de fichiers mais son gros défaut est de charger la totalité du fichier en mémoire, ce qui pose évidement un problème pour les gros fichiers qui génère une utilisation abusive du swap voir un "Out of Memory".
J'ai essayé de charger progressivement mon fichier dans un buffer de taille limitée ( 16Mo ), et de l'envoyer directement mais le navigateur ne reçoit que le header puis le premier bloc de 16Mo ( et on observe bien 2 fichiers distincts reçus sur Firefox).
Du coup comment peut on faire en sorte que le navigateur reçoit bien la totalité du fichier sans charger la totalité de celui ci en mémoire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int tmpLength = -1; byte[] mybytearray = new byte[16777216]; fis = new FileInputStream(myFile); bis = new BufferedInputStream(fis); client.setSendBufferSize(16777216); //Je ne sais plus pourquoi j'ai mis ça, j'ai du rajouter parce que ça ne marche pas os = new BufferedOutputStream(client.getOutputStream()); System.out.println("Sending " + path + "(" + length + " bytes)"); header = initHtmlHeader(path); header += mybytearray.length + "\r\n\r\n"; os.write(header.getBytes(), 0, header.length()); while ((tmpLength = bis.read(mybytearray)) != -1) { os.write(mybytearray, 0, tmpLength); os.flush(); }
Partager