Bon ben je viens d'essayer et j'ai essayé de retourner le pb sous toutes les coutures mais ça ne marche toujours pas il me met java.lang.outOfMemory error.
Voila une partie de mon code:
//j'obtiens l'adresse absolue de mon fichier (ça marche) String adresseFichier=config.getAdresseSMQ()+File.separator+(String)((Vector)objectTransmis.getContenu()).elementAt(0);
|
//j'ouvre donc un FileInputStream pour lire mon fichier byte par byte
FileInputStream fichierADecouper=new FileInputStream(config.getAdresseSMQ()+File.separator+(String)((Vector)objectTransmis.getContenu()).elementAt(0));
|
//je détermine combien il y aura de paquet à envoyer
int tailleFichier=fichierADecouper.available(); int nbPaquet=(new Double(StrictMath.ceil(tailleFichier*1.0/TAILLEPAQUER))).intValue();
|
//je cré le premier objet à envoyer qui déterminera combien il y aura de paquet, le nom du fichier et sa date de création
Vector oldContenu=(Vector)objectTransmis.getContenu(); Vector contenu=new Vector(); contenu.add(oldContenu.elementAt(0)); contenu.add(oldContenu.elementAt(1)); contenu.add(oldContenu.elementAt(2)); contenu.add(new Integer(nbPaquet)); objectTransmis=new ObjectTransmis("envoiFichier",contenu);
|
//j'ajoute ce premier objet dans le vector qui contient tous les objets à envoyer ( ce vector est limité en taille ) le pb ne vient donc pas de là
objectATransmettres.add(objectTransmis); aTransmettre++;
|
//je crée chaque tronçon de fichier à partir du FileInputStream
int[] tranche; Vector trancheVec; for (int i=0;i<nbPaquet;i++){ //vérification que le vecteur d'attente d'envoi n'est pas plein while(MAXSIZE==objectATransmettres.size()){ System.out.println("vector rempli"); try { wait(100); } catch (InterruptedException e) { e.printStackTrace(); } } tranche=new int[TAILLEPAQUER]; int byteFichier=-1; for (int j=0;j<tranche.length;j++){ byteFichier=fichierADecouper.read(); tranche[j]=byteFichier; } trancheVec=new Vector(3); trancheVec.add((String)((Vector)objectTransmis.getContenu()).elementAt(0)); trancheVec.add(new Integer(i)); trancheVec.add(tranche); objectTransmis=new ObjectTransmis("envoiFichier",trancheVec); objectATransmettres.add(objectTransmis); aTransmettre++; }
|
et donc comme ça il arrive à m'envoyer 14,7 Mo (j'envoi des paquet de 1000000 de d'octets).
Je me posais donc la question: ouvre t-il le fichier au fur et à mesure qu'il lit dans le FileInputStream? Dans ce cas, ce n'est pas bon, parce qu'un fichier qui fait plus de 650 Mo par exemple, il ne pourra pas l'ouvrir entièrement.
aurais-tu une réponse voire une solution.
merci,
Frouf