2011-12-25 60 views
0

如何在python中將浮點值寫入文件以便稍後可以使用ObjectInputStream#readFloat在Java中讀取?我如何在python中編寫浮點值,可以在Java中本地讀取?

我需要高讀取性能,所以我想避免從字符串解析浮點數。

+2

對於非Java的人,你能否詳細說明'ObjectInputStream#readFloat'的期望?它是IEEE浮點數字的字節,是否沒有任何元數據或某種特定的序列化協議?在後一種情況下,可能更容易就前者達成一致。 – delnan 2011-12-25 16:03:38

+0

@delnan不完整的答案,但據我所知,Java中的浮點數是IEEE-754兼容的32位浮點數。同樣以Java float((2-2^-23)·2^127)的最大值計算,它將是IEEE-754浮點數的* single precision *或* binary32 *版本。 – Esko 2011-12-25 16:57:20

+1

你有沒有試過尋找Jython? Jython是一個在JVM上運行的Python實現,它支持與Java類型進行交互。你甚至可以在python腳本中實例化一個ObjectInputStream對象。 – HardlyKnowEm 2011-12-25 17:23:37

回答

1

使用struct模塊(documentation),將數據指定爲f

+0

雖然在任何對性能至關重要的應用程序中,當您必須花費時間從文件中讀取數據時,您纔會關心用於解析float的極少時間(I/O通常是這些事情的瓶頸),你可能應該首先努力解決浮點類型的需求。考慮使用定點算術庫。 – 2011-12-25 18:41:41

+0

謝謝,IO不是這裏的瓶頸,我測量過。也許我不想將float編碼爲String的更大原因是它不具有空間效率(float數據將被捆綁到Android包中,因此我不想讓它變得太大)。 – fhucho 2011-12-25 19:29:50