Je développe un système client-serveur en Java. J'envoie les messages sur un canal TCP avec des objets sérialisés.
Je devrai également envoyer des fichiers. Je pourrais simplement définir ma propre classe de messages personnalisée :
public class SendFile implements Serializable {
private byte[] fileContents;
...
}
et l'envoyer. Cela pose un problème si nous avons un gros fichier, car d'après ce que j'ai compris, il essaiera d'avoir tout en mémoire avant d'envoyer le fichier à l'autre partie.
J'ai lu des articles sur Externalizable
mais cela ne sera pas mieux si le fichier est encore lu dans toute la mémoire de mon ordinateur avant d'être envoyé sur le canal TCP. Je voulais une façon "paresseuse" de le faire (en le lisant sur le disque au moment où je l'envoie sur le réseau, et en supprimant de la mémoire ce qui a déjà été lu).
Quelle est la manière la plus propre de traiter cette question ? Dans le pire des cas, je pourrais simplement le diviser en petits morceaux, mais j'aimerais l'éviter si possible.
EDITAR:
Bien sûr, je pourrais simplement ouvrir un flux sur le fichier et "l'envoyer". Mais cela impliquerait de traiter l'envoi d'un fichier et tous les autres messages de manière distincte, ce que je cherche à éviter.
Gracias