2017-04-20 3 views
0

je convertir float en tableau byte[] avec ce code:FileOutputStream changement `octet de 0A` à` 0D 0A`

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

Par exemple, si je mets le numéro 0.02f je reçois les octets [60,-93,-41,10] J'essaie d'écrire ce byte[] à fichier avec ce code:

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

sur la plupart des plate-forme HEX-éditeur ce fichier ressemble à ceci: 3C A3 D7 0A. Mais sur un appareil spécial, le même code donne ceci: 3C A3 D7 0D 0A. Avant chaque 0A0D apparaît.

Je sais que 0A est un LF et 0D 0A est un CRLF mais je ne sais pas comment cela peut être.

Avec quoi peut-il être connecté?

+0

IX Les systèmes d'exploitation utilisent '0A' comme fin de ligne et Windows '0D 0A' – Jens

+0

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

Répondre

2

Il semble que lorsque les données sont transférées sur votre "périphérique spécial", elles sont traduites comme s'il s'agissait d'un fichier texte. Cela va corrompre le fichier de la manière que vous voyez. par exemple. FTP a un mode de transfert de texte qui le fait.

Vous ne devez pas confondre texte et binaire. Vous écrivez un format binaire et si vous le lisez en format binaire, les nouvelles lignes ne sont pas pertinentes. Ne le lisez pas comme du texte car ce n'est pas du texte et vous n'aurez aucun problème.

+1

@VictorChurilov Encore, Peter a raison. Quelque part votre fichier est traité comme s'il s'agissait d'un fichier texte au lieu d'un fichier binaire. Comment l'envoyez-vous à "l'appareil spécial"? Utiliser FTP? Utilisez-vous le mode de transfert binaire? Y at-il quelque chose d'autre qui traite le fichier comme s'il s'agissait d'un fichier texte? – Jesper

+0

Cet "appareil spécial" (Android 6.0.1) génère ce mauvais fichier avec ce code simple. Autres périphériques utilisent ce code et le fichier genegate sans '0D' –

+0

@VictorChurilov Pouvez-vous ajouter' System.out.println ("length =" + file.length()); 'immédiatement après avoir écrit dans le code pour confirmer que le fichier a maintenant 5 octets? (En supposant que le fichier est un 'File') –