Ich habe versucht, eine große Datei über eine Socket
Verbindung zu senden, aber es läuft langsam und ich frage mich, ob dieser Code in irgendeiner Weise optimiert werden kann die Übertragungsgeschwindigkeit.Übertragung einer Datei über ein Netzwerk mit TCP (Beschleunigung der Übertragung)
Dies ist mein Code für das Senden der Datei:
byte[] buffer = new byte[65536];
int number;
while ((number = fileInputStream.read(buffer)) != -1) {
socketOutputStream.write(buffer, 0, number);
}
socketOutputStream.close();
fileInputStream.close();
Dies ist, was ich verwenden, um die Datei auf der anderen Maschine zu erhalten:
byte[] buffer = new byte[65536];
InputStream socketStream= clientSocket.getInputStream();
File f=new File("C:\\output.dat");
OutputStream fileStream=new FileOutputStream(f);
while ((number = socketStream.read(buffer)) != -1) {
fileStream.write(buffer,0,number);
}
fileStream.close();
socketStream.close();
ich das Filestream denken Schreiben wird die Einnahme die meiste Zeit. Könnte irgendjemand irgendeinen Rat geben, diesen Code zu beschleunigen?
Sie haben Recht. Ich konnte in 1111s ungefähr 1327582120 Bytes übertragen. Die Anweisung fileOutputStream.read (..) nahm insgesamt ungefähr 7 Sekunden in Anspruch, was angesichts der Größe der Datei ziemlich normal zu sein scheint. Das Problem war tatsächlich mit dem Netzwerk, das mir verschiedene Übertragungsraten gab (ich habe viele PCs mit diesem Netzwerk verbunden). Aber gibt es in diesem Code noch Verbesserungsmöglichkeiten? :) Tools wie IPMSG geben mir konsistente Übertragungsraten, die etwas besser sind als das, was ich hier bekommen habe, und so fragte ich mich, ob es mein schlechter Code war, der das Problem verursachte. – coderplus
@aneesh: Man muss ziemlich genau schauen, was auf der Netzwerkebene vor sich geht - aber ich vermute, dass man * signifikante * zusätzliche Komplexität für nur einen * leichten * Leistungszuwachs benötigt. Allerdings scheint 1MB/Sekunde nicht besonders schnell zu sein - auf welcher Art von Netzwerk ist das? –
kein verdrahtetes. Es ist ein WiFi-Netzwerk mit einem ADSL-Router – coderplus