2011-06-24 114 views
12

我有一個二進制文件,我逐字節讀取。將8字節的小端二進制轉換爲雙精度浮點型

我遇到了一個8字節長的部分,持有一個雙精度浮點數(小端)。我無法弄清楚如何讀取這些信息並通過掩蔽和/或轉換來正確計算。

(具體來說,文件類型是.LAS,但這應該不重要)。

是否有任何Java技巧?

回答

19

您可以使用ByteBuffer

byte[] bytes

double d = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getDouble(); 

從插座

ByteBuffer bb = ByteBuffer.allocate(64*1024).order(ByteOrder.LITTLE_ENDIAN); 
socket.read(bb); 
bb.flip(); 
double d = bb.getDouble(); 
+1

非常可靠的貢獻,正是我所需要的。謝謝(和其他所有回答如此之快的人)!週末愉快。 – RedLeader

+0

直接緩衝區在這裏會更好(第二個樣本),只要緩衝區不經常分配和重用。在這種情況下,我傾向於使用套接字readBuffer作爲大小。 – bestsss

+0

@bestsss,同意如果管理正確,直接的ByteBuffer會更好。我發現直接緩衝區的速度可以高達20%。如果您將它與Unsafe類一起使用,它可以再快30%。 ;) –

0

只需使用DataInputStream來讀取文件,並使用readDouble()方法。

+1

DataInputStream類始終是「網絡定購」,這是大端。 –

+0

「應用程序使用數據輸出流來寫入稍後可以通過數據輸入流讀取的數據」。我不認爲在這種情況下 – peter

1
  1. 從小端到大端轉換。
  2. ByteBufferInputStream包裝你的轉換字節。
  3. 通過DataInputStream.readDouble(in)獲取您的雙精度數字。

或者,你可以採取從JDK源readDouble方法的主體並跳過步驟2和3。

相關問題