从java中的二进制文件读取Double时获取错误的值

时间:2011-11-07 14:29:56

标签: java double binaryfiles

RandomAccessFile in = new RandomAccessFile("BOT.grd", "r");
in.seek(28);
double xll=in.readDouble();

以上是我用于读取双数据的代码,该数据存在于29到36字节的位置。存在的值是500,但我得到2.088E-317

1 个答案:

答案 0 :(得分:1)

该文件似乎存储在与java使用的文件不同的Endianness中。在转换为double之前,可能需要反转字节,您可以尝试以下代码来读取值:

long   l = in.readLong();
double d = Double.longBitsToDouble(Long.reverseBytes(l));

以下是一个说明问题的示例:

double d = 500.0;

long l1 = Double.doubleToLongBits(d);
long l2 = Long.reverseBytes(l1);

System.out.println(Double.longBitsToDouble(l1));
System.out.println(Double.longBitsToDouble(l2));

输出:

500.0
2.088356E-317