2009-04-16 8 views
3

Je voudrais faire un transfert de données entre deux ordinateurs en utilisant socket.Iam Datagram en utilisant la ligne suivante de cette façon:Cette instruction est-elle correcte dans Java?

host=InetAddress.getByAddress("mypc",new byte[]{192,168,1,110}); 

mais quand j'utilise l'énoncé ci-dessus je reçois cette erreur: « Possible perte de précision »

Alors je rejetterai l'int octets de cette façon:

InetAddress.getByAddress("mypc",new byte[]{(byte)192,(byte)168,(byte)1,(byte)110}); 

Est-ce que le travail de déclaration ci-dessus maintenant ???

+2

Pourquoi ne pas l'essayer et le savoir? Sûrement que c'est mieux que d'essayer cette approche de quiz. Si ça ne marche pas, * puis * revenez et demandez nous pourquoi. – paxdiablo

Répondre

1

Il ne pourrait pas, cos la valeur maximale pour un octet est de 127 et au-delà qu'il retournement au -64 négatif pour 192, -88 pour 168 et ainsi de suite ...

2

octets java sont signés (stupide, je sais) si plus grand que 127 n'est pas possible.

Voir la réponse d'alnitaks pour une réponse plus complète (et plus tard :).

+0

pouvez-vous me dire comment je peux modifier cette déclaration afin que le commn. peut être fait ? – arshad

+1

Ne vous embêtez pas avec ce lien; cet extrait appartient à http://thedailywtf.com/. Voir la réponse d'Alnitak pour savoir comment traiter les octets comme s'ils n'étaient pas signés. –

14

Si vous l'avez déjà dans une chaîne, il suffit d'utiliser getByName():

InetAddress host = InetAddress.getByName("192.168.1.110"); 

Utilisation des octets est encombré, et peut-être dangereux (en raison de byts signés utilisés en Java). Stick avec String s si vous le pouvez.

+0

Oui, cela fonctionne, mais il ne répond pas à la question réelle. – Alnitak

6

Il n'y a aucun problème pour convertir les littéraux entiers positifs en valeurs byte, même s'ils débordent.

La fonction InetAddress.getByAddress() tient parfaitement compte du fait que les valeurs supérieures à 127 seront converties en nombres négatifs. La seule chose que vous devez faire attention est de convertir les octets signés en entiers si vous voulez les afficher ultérieurement. Cela fonctionne bien:

byte b = (byte)192; 
System.out.println(b); // outputs "-64" 

int i = (b & 0xff); 
System.out.println(i); // outputs "192" 
Questions connexes