# Fehlende Bits / Bytes beim kopieren



## m!Ck (21. Jun 2007)

Hallo alle zusammen,

ich hab ein (vermutlich) kleines aber wiederliches Problem was mich langsam zur Verzweiflung treibt.
Ich möchte eine Datei per FTP auf einen Server kopieren und bediene mich dabei der FTPClient Klasse aus dem commons-net-1.4.1 Paket.

Diese gibt mir einen OutputStream zurück und ich erstelle noch einen FileInpuStream.

Der eigentlich code zum kopieren ist folgender :


```
byte[] buf = new byte[ 1024 ];
int len;
                    
// copy file
while ((len = fin.read(buf)) != -1) {
                                            
out.write(buf, 0, len);
// out.flush();
                    
}
```

Mein Problem ist jetzt, dass auf dem Weg zum Server irgendwo ein paar Bits / Bytes 'verloren' gehen und ich weiss einfach nicht woran das liegt. Ich hab auch schon versucht nach der Übertragung einen out.flush() drüber zu jagen, allerdings wurde die Sache dadruch auch nicht besser. 

Ich weiss leider auch nicht wonach ich bei dem Problem googlen soll. :/

Würde mich freuen wenn mir jemand auf die Sprünge helfen könnte !

Danke schonmal im vorraus!!

Gruß
m!Ck
[/code]


----------



## kleiner_held (21. Jun 2007)

Der Codo so wie er da steht ist richtig. Eventuell liegt der Fehler beim Empfaenger. Log doch einfach mal mit, was du gesendet hast.


----------



## m!Ck (21. Jun 2007)

Das wäre natürlich mal ne idee.

Könnte es evtl. damit zusammenhängen, dass ich mit einem FileInpuStream lese und dann in einen OutputStream schreibe ?
Ist nur eine Idee die mir noch gekommen ist, bei der ich allerdings nicht tief genug in der Thematik bin um mir selbst eine Antwort zu geben.

Gruß!


----------



## kleiner_held (21. Jun 2007)

Noe, das ist ein ueblicher Anwendungsfall. Wenn fin.read(buf) ein -1 zurueckgibt, dann sind auch alle Bytes der Datei gelesen und bei deiner Implementierung auch alle Bytes in den (Socket)-OutputStream geschrieben worden. Ich wuede zwar empfehlen das out.flush(); am Ende auszufuehren (nicht unbedingt in der while Schleife aber auf jeden Fall nach dem letzten Schreiben) aber das scheint ja bei dir nicht die Problemursache zu sein.


----------



## m!Ck (21. Jun 2007)

Ne,

ich hatte das out.flush auch am Ende der Schleife implementiert, aber das hat mich auch nicht voran gebracht.

Werde jetzt mal mitloggen was so in dem outputstream landet. evtl. bin ich ja dann schlauer 

Danke schonmal für die schnelle Hilfe !

Gruß


----------

