2015-05-15 140 views
0

Java的閱讀我有一些計算出的數據(浮點和整數),被寫入到一個12MB文件中像這樣從二進制文件

DataOutputStream os3; 
os3 = new DataOutputStream(new FileOutputStream(Cache.class.getResource("/3w.dat").getPath())); 
...... (some loops) 
    os3.writeFloat(f); 
    os3.writeInt(r); 
os3.close(); 

此後,我看它這樣

DataInputStream is3; 
is3 = new DataInputStream(new FileInputStream(Cache.class.getResource("/3w.dat").getPath())); 
...... (same loops) 
    is3.readFloat(); 
    is3.readInt(); 
is3.close(); 

所以,我在Windows 7上只寫了一次文件。之後我只在應用程序啓動時閱讀它。文件閱讀在Windows 7上工作正常,但是當我嘗試在Ubuntu上做到這一點時,我得到EOF異常(代碼和文件相同)。

我懷疑問題可能是由寫入文件的一些NaN值引起的。

順便說一句。在調試過程中,我發現在ubuntu讀取過程中運行了大約15%的循環並引發異常。它讀取的所有值都是「0.0」,但文件不包含零。

+0

當你*嘗試*它在Ubuntu,這是否意味着寫入和讀出或只是閱讀(也就是你讀通過生成的文件在Windows上運行的應用程序)? – npinti

+0

我剛剛在Ubuntu上閱讀它 – flgdev

+0

如果您在Ubuntu上編寫和閱讀的地方會發生什麼? – npinti

回答

0

問題應該是Linux和Windows之間換行符的不同。正如Clark所提到的,只需將\ n替換爲\ r \ n,並且行尾字符可以解決此問題。你可以使用Notpad ++來簡化這項工作。只需點擊菜單:

編輯 - > EOL轉換 - >轉換爲UNIX格式

這可能是還編碼的問題。如果你使用的是Windows,默認的編碼是Windows-1252或稱爲CP-1252,它是微軟的東西,在Linux上無法識別。只需將其更改爲可以被所有操作系統識別的UTF-8編碼。使用Notpad ++:

編碼 - >轉換爲UTF-8

+0

它是一個二進制文件。沒有\ n或\ r \ n – flgdev

+0

然後用UTF-8編寫您的文件 – Qianlong