2017-04-20 5 views
0

私はこのコードでfloatbyte[]に配列変換します。そして、私が書こうと、私は数0.02fを置く場合、私はバイト[60,-93,-41,10] を得るたとえばたFileOutputStream変更` 0A`バイト

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

をこのコードのファイルにこのbyte[]3C A3 D7 0A

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

最もプラットフォームでHEXエディタでこのファイルは、次のようになります。しかし、特別なデバイスでは、同じコードでこれが与えられます:3C A3 D7 0D 0A。それぞれ前に0A0Dが表示されます。

私は0ALFであり、0D 0ACRLFであることを知っていますが、これはどういうことか分かりません。

接続できるものは?

+0

IXオペレーションシステムでは、行末と '0D 0A' – Jens

+0

で '0A'が使用されます。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'を除いてそのコードとゲゲゲートファイルを使用します。 –

+0

@VictorChurilovコードに書いた直後に' System.out.println( "length =" + file.length()); 5バイト? (ファイルが 'File'であると仮定して) –

関連する問題