2017-04-20 120 views
0

我轉換floatbyte[]陣列與此代碼:FileOutputStream中改變`0A`字節'0D 0A`

byte[] bytes = ByteBuffer.allocate(4).putFloat(number).array(); 

例如,如果我把號碼0.02f我得到的字節[60,-93,-41,10] 然後我試着寫這byte[]使用此代碼文件中:

FileOutputStream fos = new FileOutputStream(file); 
fos.write(bytes); 
dbf.close(); 

在十六進制編輯器這個文件看起來像這樣大多數平臺:3C A3 D7 0A。但在特殊設備上,相同的代碼給出了這個:3C A3 D7 0D 0A。出現之前,每個0A0D

我知道比0ALF0D 0ACRLF但我不知道這是如何。

它可以連接什麼?

+0

IX操作系統使用'0A'作爲行尾和Windows'0D 0A' – Jens

+0

http://stackoverflow.com/questions/3776923/how-can-i-normalize-the-eol-character-in-java –

回答

2

這聽起來像是當數據傳輸到你的「特殊設備」時,它被翻譯成文本文件。這會以您看到的方式破壞文件。例如FTP有一個文本傳輸模式。

你不應該混淆文本和二進制。您正在編寫二進制格式,如果您將其作爲二進制格式讀取,則新行不相關。

不要將它作爲文本閱讀,因爲它不是文本,你不會有問題。

+1

@VictorChurilov不過,彼得是對的。在某處,您的文件被視爲文本文件而不是二進制文件。你如何將它發送到「特殊設備」?使用FTP?您是否使用二進制傳輸模式?還有別的東西把文件看作是文本文件嗎? – Jesper

+0

「特殊設備」(Android 6.0.1)使用該簡單代碼生成該不良文件。其他設備使用該代碼和沒有'0D'的genegate文件 –

+0

@VictorChurilov您可以添加'System.out.println(「length =」+ file.length());'立即在代碼中寫入以確認文件現在具有5個字節? (假設文件是​​一個'File') –

相關問題