Heim > Java > javaLernprogramm > Hauptteil

Warum führt meine Dateiübertragung über Sockets zu einer leeren Datei?

Susan Sarandon
Freigeben: 2024-11-09 18:20:02
Original
908 Leute haben es durchsucht

Why does my file transfer over sockets result in an empty file?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage