2017-04-20 146 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') –

相关问题