这个陈述在java中是否正确?

时间:2009-04-16 11:32:02

标签: java datagram

我想使用数据报套接字在两台计算机之间进行数据传输。我这样使用以下行:

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

但是当我使用上面的语句时,我得到了这个错误:“可能会丢失精度”

所以我用这种方式将int转换为字节:

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

上述陈述现在会起作用吗?

4 个答案:

答案 0 :(得分:14)

如果您已将其包含在字符串中,只需使用getByName()

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

使用字节是混乱的,并且可能很危险(由于Java中使用的签名字节)。如果可以,请坚持使用String

答案 1 :(得分:6)

将正整数文字转换为byte值是没有问题的,即使它们溢出也是如此。

InetAddress.getByAddress()函数可以很好地应对超过127的值将被转换为负数的事实。

您唯一需要注意的是,如果您随后想要显示它们,请将已签名的字节转换回整数。这很好用:

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

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

答案 2 :(得分:2)

java字节被签名(愚蠢,我知道),因此不可能超过127。

请参阅alnitaks对更完整(以及稍后:)答案的回应。

答案 3 :(得分:1)

它可能不是,因为一个字节的最大值是127,超过它将翻转到负-64为192,-88为168等等......