在Java中序列化Float的最佳方法是由C ++应用程序读取?

时间:2009-08-11 01:43:29

标签: java c++ serialization

我需要序列化一个java Float,以便通过Socket通信用C ++编写的应用程序读取。这有标准吗?在Float类中使用floatToIntBits方法最简单,但我不确定它是多么标准。

3 个答案:

答案 0 :(得分:7)

事实上,这是非常标准的。 floatToIntBits函数为您提供浮点数的IEEE编码的实际字节数。唯一的问题是字节将是big-endian,因此在读入C ++应用程序时必须反转字节顺序。 (除非你的C ++平台也是big-endian!)

答案 1 :(得分:6)

使用Float.floatToIntBits()(或Float.floatToRawIntBits()如果要保留NaN值)将float转换为整数。指定floatToIntBits()以IEEE 754格式返回整数,这是几乎所有C / C ++实现使用的格式。然后,您应该以网络字节顺序(big-endian)将整数转换为字节数组,然后可以安全地序列化为文件,套接字,字节流等:

int floatBits = Float.floatToIntBits(myFloat);
byte floatBytes[] = new byte[4];
floatBytes[0] = (byte)(floatBits >> 24);
floatBytes[1] = (byte)(floatBits >> 16);
floatBytes[2] = (byte)(floatBits >> 8);
floatBytes[3] = (byte)(floatBits);

答案 2 :(得分:0)

除非你真的需要它是二进制的,无论是出于带宽还是速度的原因,我个人只是将它转换为字符串。它避免了各种二进制兼容性问题。