2011-10-23 4 views
1

Je voudrais transférer un fichier plus quelques données supplémentaires sur un socket tcp. Ce serait vraiment bien si je pouvais le faire en une fois sans avoir à diviser les données en plusieurs transmissions.Transfert de fichier et de données supplémentaires via TCP (Java)

Quelque chose comme

String data = "some data to be transferred"; 
File f = new File("myfile"); 
byte[] fileData = ... //read bytes from file 
out.write(data + fileData);  //out is some OutputStream 

Maintenant, quel genre de outputstream aurais-je utiliser au mieux pour cela? Comment puis-je séparer les données et le contenu du fichier à la réception?

EDIT: J'ai déjà un client et un serveur tcp, tous deux utilisant PrintWriter et BufferedInputReader. Les seules données transmises jusqu'à présent sont des chaînes simples. Je cherche un moyen facile d'intégrer le transfert de fichiers.

Répondre

2

Comme c'est TCP, vous savez que les données sont toujours transférées et qu'elles arrivent dans le même ordre que celui où elles ont été envoyées. Sachant cela et dans quel ordre vous avez envoyé les données, vous pouvez simplement "déballer" les données envoyées dans le même ordre que vous l'avez envoyé.

Une autre solution consisterait à envelopper le contenu dans un objet qui implémente serializable. Si vous utilisez cette technique, vous n'avez pas à vous inquiéter de l'emballage et du déballage puisque la sérialisation gère cela pour vous. Here's an example en utilisant ceci.

+0

Je suis à la recherche d'une solution qui s'intègre facilement avec le code client/serveur tcp existant où seules les chaînes sont transmises en utilisant PrintWriter et BufferedInputReader. – mort

+1

Ensuite, vous devriez peut-être essayer de convertir 'byte []' dans la chaîne ['Base64'] (http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html), mais ce n'est pas une bonne solution. Au lieu de cela, vous pouvez utiliser ['DataOutputStream'] (http://download.oracle.com/javase/6/docs/api/java/io/DataOutputStream.html) et [' DataInputStream'] (http://download.oracle .com/javase/1.4.2/docs/api/java/io/DataInputStream.html). Ils vous permettent d'envoyer des chaînes et des 'byte []' raw à la fois. –

+0

Ok, je pense que je vais aller pour le DataInput/OutputStream – mort

Questions connexes