-2
votes

Si je dois envoyer seulement 1 octet via une prise, puis-je simplement utiliser un caractère?

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 char en Java est 2 octets. Si j'utilise UTF-8, puis-je simplement envoyer un char et il sera de taille 1 octet?

Aussi mieux utiliser: DataGuTream et dataOutPutStream ou bufferedInputtream et bufferedOutPutStream ?


2 commentaires

Lorsque vous souhaitez envoyer un octet, pourquoi ne pas utiliser un octet ?


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.


3 Réponses :


0
votes

La convention habituelle de Java consiste à écrire des octets en utilisant sortiestream . Aucune des méthodes ici n'accepte ici char . Vous auriez besoin de convertir le caractère en octet [] array, par exemple xxx

si vous envisagez d'utiliser des sockets, vous pouvez vérifier socket.getoutPutStream () Méthode:

retourne un flux de sortie pour cette prise.

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 illégalBlockingModeException .

Fermeture de la sortie de sortie fermera la prise associée.


2 commentaires

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 appropriée si nécessaire



0
votes

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: xxx


2 commentaires

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.



1
votes

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');
}


0 commentaires