Je suis en train de transférer le fichier par socket dans java..en fait, j'ai été en mesure de transférer..mais il y a un problème survenu..le problème est le fichier envoyé est de taille réduite .. par exemple i transfert de fichiers de 300 Mo, le client ne recevra que 299mb .... je me demandais ce qui pourrait être le problème ..transférer le fichier par socket en Java
côté serveur
File myFile = new File (basePath+"\\"+input.readUTF());
byte [] mybytearray = new byte [1024];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
txtArea.append("Sending... \n");
while (true)
{
int i = bis.read(mybytearray, 0, mybytearray.length);
if (i == -1) {
break;
}
output.write(mybytearray, 0, i);
txtArea.append("Sending chunk " + i + "\n");
}
output.flush();
côté client
output.writeUTF("get");
txtArea.append("Starting to recive file... \n");
long start = System.currentTimeMillis();
byte [] mybytearray = new byte [1024];
txtArea.append("Connecting... \n");
output.writeUTF(remoteSelection);
FileOutputStream fos = new FileOutputStream(basePath+"\\"+remoteSelection);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int bytesRead = input.read(mybytearray, 0, mybytearray.length);
while(bytesRead != -1)
{
bos.write(mybytearray, 0, bytesRead);
txtArea.append("got chunk" + bytesRead +"\n");
bytesRead = input.read(mybytearray, 0, mybytearray.length);
}
bos.flush();
Vous devez vérifier -1 avant l'écriture, pas après. Vous utilisez aussi abuse() d'une manière spécifiquement mise en garde dans le Javadoc; vous supposez que la taille du fichier correspond à un int; etc etc – EJP
Ajouter à ce que EJP a souligné, vous vérifiez également disponible sur un BufferedInputStream, je suppose qu'il renvoie seulement la longueur de tampon du flux d'entrée sous-jacent au plus. – dragon66
alors comment puis-je vérifier la taille du fichier? j'essaie d'utiliser byte [] mybytearray = new byte [(int) myFile.length()]; avant ... mais il renvoie une erreur .. il est hors de tas quand j'essaye d'envoyer un gros fichier .. comme 600mb .. –