Dateiübertragung über Sockets: Behebung von Datenaustauschproblemen
Bei der Java-Programmierung kann das Senden und Empfangen von Dateien als Byte-Arrays über Sockets auf Herausforderungen stoßen. Ziel dieses Leitfadens ist es, ein Problem zu lösen, mit dem ein Entwickler konfrontiert war, der während des Datenübertragungsprozesses zwischen Client und Server die Erstellung einer leeren Datei beobachtete.
Serverkonfiguration
Die Aufgabe des Servers besteht darin, Daten vom Client zu empfangen. Der folgende Codeausschnitt beschreibt die Funktionalität des Servers:
<code class="java">byte[] bytes = new byte[1024]; in.read(bytes); System.out.println(bytes); FileOutputStream fos = new FileOutputStream("C:\test2.xml"); fos.write(bytes);</code>
Das Problem tritt in der Zeile fos.write(bytes) auf, wo das Byte-Array unvollständige Daten enthält. Dies liegt daran, dass in.read(bytes) nur einen Teil der Datenmenge in das Array liest.
Client-Konfiguration
Die Aufgabe des Clients besteht darin, Daten an den Server zu senden . Der folgende Codeauszug enthält jedoch eine unvollständige Aktion:
<code class="java">//out.write(bytes); System.out.println(bytes);</code>
Die Zeile out.write(bytes) ist auskommentiert, wodurch verhindert wird, dass die Daten im Byte-Array auf den Server geschrieben werden. Folglich empfängt der Server ein leeres Array, was zur Erstellung einer leeren Datei führt.
Lösung
Um dieses Problem zu beheben, finden Sie die richtige Methode zum Kopieren eines Streams Java nutzt einen Puffer und liest kontinuierlich Daten in den Puffer, bis keine Daten mehr zum Lesen vorhanden sind. Das folgende Codefragment veranschaulicht diesen Ansatz:
<code class="java">byte[] buffer = new byte[8192]; while ((count = in.read(buffer)) > 0) { out.write(buffer, 0, count); }</code>
Das obige ist der detaillierte Inhalt vonWarum führt meine Dateiübertragung über Sockets zu einer leeren Datei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!