Maison  >  Article  >  Java  >  Pourquoi mon transfert de fichiers via des sockets génère-t-il un fichier vide ?

Pourquoi mon transfert de fichiers via des sockets génère-t-il un fichier vide ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-09 18:20:02908parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn