Transmission de fichiers sur sockets : résoudre les problèmes d'échange de données
Dans la programmation Java, l'envoi et la réception de fichiers sous forme de tableaux d'octets sur des sockets peuvent rencontrer des défis. Ce guide vise à résoudre un problème rencontré par un développeur ayant observé la création d'un fichier vide lors du processus de transfert de données entre le client et le serveur.
Configuration du serveur
La tâche du serveur est de recevoir des données du client. L'extrait de code suivant décrit les fonctionnalités du serveur :
<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>
Le problème survient dans la ligne fos.write(bytes), où le tableau bytes contient des données incomplètes. En effet, in.read(bytes) ne lit qu'une quantité partielle de données dans le tableau.
Configuration du client
Le devoir du client est d'envoyer des données au serveur . Cependant, l'extrait de code suivant contient une action incomplète :
<code class="java">//out.write(bytes); System.out.println(bytes);</code>
La ligne out.write(bytes) est commentée, empêchant les données du tableau bytes d'être écrites sur le serveur. Par conséquent, le serveur reçoit un tableau vide, entraînant la création d'un fichier vide.
Solution
Pour résoudre ce problème, la bonne façon de copier un flux dans Java consiste à utiliser un tampon et à lire en continu les données dans le tampon jusqu'à ce qu'il n'y ait plus de données à lire. Le fragment de code suivant illustre cette approche :
<code class="java">byte[] buffer = new byte[8192]; while ((count = in.read(buffer)) > 0) { out.write(buffer, 0, count); }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!