Maison >Java >javaDidacticiel >Comment envoyer et recevoir de manière fiable des fichiers binaires via des sockets Java ?

Comment envoyer et recevoir de manière fiable des fichiers binaires via des sockets Java ?

DDD
DDDoriginal
2024-11-05 08:33:02519parcourir

How to Reliably Send and Receive Binary Files Over Java Sockets?

Envoi et réception de fichiers binaires via Java Sockets

Dans cette discussion, nous approfondissons les subtilités de l'envoi et de la réception de fichiers au format binaire ( tableaux d'octets) sur les sockets Java.

Analysons d'abord l'implémentation du serveur. Le serveur écoute sur le port 4444 et lit les données du client à l'aide de la méthode read(). Cette méthode nécessite une taille de tampon prédéfinie, qui dans ce cas est définie sur 1 024 octets. Cependant, cette approche présente une limite. Si le fichier en cours de transfert est plus grand que la taille du tampon, seule une partie du fichier sera reçue, entraînant une corruption des données.

Le code client, quant à lui, tente d'écrire le contenu du fichier " test.xml" au flux de sortie à l'aide de la méthode write(). Cependant, avant d'envoyer les données, il est crucial de déterminer la taille du fichier. Si la taille du fichier dépasse la valeur entière maximale (Integer.MAX_VALUE), une erreur se produira.

Pour résoudre ces problèmes et garantir un transfert de fichiers fiable, une approche plus robuste est recommandée. Le code ci-dessous montre la manière correcte de copier un flux d'octets à l'aide d'un tampon :

<code class="java">int count;
byte[] buffer = new byte[8192]; // The buffer size can be adjusted as needed
while ((count = in.read(buffer)) > 0) {
    out.write(buffer, 0, count);
}</code>

En utilisant un tampon et en parcourant les données jusqu'à ce que la fin du flux soit atteinte, nous pouvons gérer efficacement les fichiers de n'importe quel taille.

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