我有一个二进制文件,我逐字节读取。
我遇到了一个8字节长的部分,它持有一个双精度浮点数(小端)。我无法弄清楚如何读取它并通过屏蔽和/或投射来正确计算它。
(具体来说,文件类型是.LAS,但这无关紧要。)
有没有Java技巧?
答案 0 :(得分:20)
您可以使用ByteBuffer
来自byte[] bytes
double d = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN ).getDouble();
来自Socket
ByteBuffer bb = ByteBuffer.allocate(64*1024).order(ByteOrder.LITTLE_ENDIAN );
socket.read(bb);
bb.flip();
double d = bb.getDouble();
答案 1 :(得分:1)
这里描述了两种不同的方法:http://bytes.com/topic/java/answers/18253-big-endian-vs-little-endian-data。两者都有效。
答案 2 :(得分:1)
如果需要读取和交换字节顺序,可以使用Commons IO中的EndianUtils:
https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/EndianUtils.html
答案 3 :(得分:1)
ByteBufferInputStream
使用。DataInputStream.readDouble(in)
获取双精度数字。或者,您可以从JDK源中获取readDouble
方法的主体,并跳过第2步和第3步。
答案 4 :(得分:0)
只需使用DataInputStream
即可阅读该文件,并使用readDouble()
方法。