Maison > Java > javaDidacticiel > 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
Libérer: 2024-11-09 18:20:02
original
953 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal