J'ai un programme client - serveur à l'aide de TCP. Maintenant, je veux envoyer différents messages de taille différente. J'ai lu qu'un Aussi mieux utiliser: char code> en Java est 2 octets. Si j'utilise UTF-8, puis-je simplement envoyer un
char code> et il sera de taille 1 octet? p>
DataGuTream code> et
dataOutPutStream code> ou
bufferedInputtream code> et
bufferedOutPutStream p>? P>
3 Réponses :
La convention habituelle de Java consiste à écrire des octets en utilisant si vous envisagez d'utiliser des sockets, vous pouvez vérifier retourne un flux de sortie pour cette prise. P>
Si cette prise a un canal associé, le flux de sortie résultant déléguait toutes ses opérations au canal. Si le canal est en mode non bloquant, les opérations d'écriture de la sortie de sortie lanceront un Fermeture de la sortie code> de sortie code> fermera la prise associée. P>
blockQuote> p> sortiestream code>
. Aucune des méthodes ici n'accepte ici char code>. Vous auriez besoin de convertir le caractère en
octet [] code> array, par exemple
socket.getoutPutStream () code>
Méthode: P>
illégalBlockingModeException code>. P>
Ouais, j'utilise un octet [], mais je pensais s'il y avait une manière que le client puisse écrire comme un char ou une chaîne et que ce message serait de différentes tailles fixes. (La chose est qu'il est nécessaire que le serveur fait écho au message, donc si j'utilise l'octet, je ne peux pas voir un message spécifique montré au client).
Oui, vous pouvez. Vous devez juste connaître le codage utilisé pour que les octets puissent être décodés dans une chaîne code> appropriée code> si nécessaire
Codage UTF-8 utilise de 1 à 4 octets pour stocker des caractères, il n'est donc pas garanti que ce ne sera que 1 octet.
Si vous souhaitez envoyer un octet, utilisez simplement un type primitif d'octet. < / p>
Essayez ce code: p>
J'utilise: dataOutputStream = nouveau dataOutputStream (socket.getoutPutStream ()); Et puis Byte Arr [] = nouvel octet [n] où n est le nombre d'octets que je veux envoyer. Ensuite, je l'ai envoyé via Out.write (Ar). Ça va fonctionner de cette façon?
J'ai mis à jour ma réponse avec le code exemple. Cela fonctionnera et vous n'avez pas besoin de dataOutPutStream car la méthode d'écriture est la classe de sortie. Vous devez vous assurer que vous faites la conversion UTF-8 correctement.
Vous souhaitez utiliser un de sortie code> pour envelopper votre
sortiestream code>. Cela vous permettra de spécifier un codage et d'écrire
char code> S au lieu de
octet code> s. C'est le travail code> de sortie code> pour connaître le codage et convertir
char code> s sur
octet code> s de manière appropriée. Si vous avez spécifié que votre
de sortie code> utilise utf-8, et que vous écrivez un caractère utilisant un octet dans UTF-8, vous pouvez vous attendre à ce que l'on puisse écrire un octet à écrire dans le flux.
try (OutputStreamWriter writer = new OutputStreamWriter(myOutputStream, "UTF-8")) {
writer.write('x');
}
Lorsque vous souhaitez envoyer un octet, pourquoi ne pas utiliser un octet code> code>?
Re "Si j'utilise UTF-8, puis-je simplement envoyer un caractère et il sera de taille 1 octet?" Cela dépend de ce que le personnage est. Un caractère occupe un à quatre octets lorsqu'il est codé comme UTF-8.