Les String c bien mais les Octets c'est mieux...

Résolu
Signaler
Messages postés
152
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
8 octobre 2008
-
Messages postés
108
Date d'inscription
samedi 31 juillet 2004
Statut
Membre
Dernière intervention
12 septembre 2009
-
Bonjour,






Je joue un peu avec les com. TCP... j'ai trouvé plein d'exemples sur ce site pour monter une petite architecture client-serveur simple transferant des string...  j'utilise donc les objets suivants:

BufferedReader

B_In

PrintStream

S_Out

C'est bien, mais j'ai rapidement rencontré des problemes quand j'ai voulu transferer autre chose qu'un texte tapé manuellement, certain caracterers mettant vite le bazar....

quels sont les objets que je dois utiliser pour transférer des tableaux d'octets  byte[] plutot que des strings ?

Merci.

5 réponses

Messages postés
108
Date d'inscription
samedi 31 juillet 2004
Statut
Membre
Dernière intervention
12 septembre 2009
3
Salut
ya une methode dans la class String qui s'appel   byte[] getBytes()
exemple
String str = "hello";
byte[] octets = str.getBytes();
et pour envoyer le tout ,utilse la class java.io.OutputStream
et java.io.InputStream pour la reception
attention ca genere des exception
donc :
try
{
//...
}
catch(java.io.IOException)
{
}
oblige
et comme ca tu envoi octets au lieu de str
je ne sais pas si ca repond a ta question
;-)
Messages postés
152
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
8 octobre 2008
1
oui... voila ce que j'ai créé:

OUT=
clientSocket.getOutputStream();

IN=
clientSocket.getInputStream();
bien pour envoyer j'utilise :

try{

   OUT.write(bytes[]);

   OUT.flush();
}
catch(IOException e){}

Ca a l'air bon

mais pour recevoir je ne vois pas comment récuperer le tableau de byte...

try{

   IN.read()
;  <- me retourne un entier pas un tableau de byte
}
catch(IOException e){}
Messages postés
152
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
8 octobre 2008
1
j'ai capté...

pour lire je fais





byte



[] B=new



byte



[100];



IN.read(B);





et mon retour se trouve dans B
Messages postés
108
Date d'inscription
samedi 31 juillet 2004
Statut
Membre
Dernière intervention
12 septembre 2009
3
pas
OUT.write(bytes[]);
mais tu doit mettre ton tableau d'ectets a la pace
//-------------------

et ben oui, l'entier correspond a un byte
pour envoyer un fichier par exmple tu va faire
int i ;
char c;
byte b;
while( (i = IN.read())!= -1 )
{
c = (char)i;    //la tu la en caractere
b = (byte) i;  //la tu la en byte
//et a partir de la ten fait ce que tu veu
}

Ah oui noublie pas devoyer le -1 pour faire savoir la fin de ton flux
comme ca
int i = -1;
byte b = (byte) i;
//et tu l'envoi

;-)
Messages postés
108
Date d'inscription
samedi 31 juillet 2004
Statut
Membre
Dernière intervention
12 septembre 2009
3
Oui execte ;la c'est radical (lol)
mais pas toujour util

;-)