2017-04-19 4 views
0

J'ai un problème avec FileOutputStream.FileOutputStream écrit des octets inexistants

J'utilise ce code simple:

byte[] data1 = BD25Writer.getData1(); 
byte[] data2 = BD25Writer.getData2(); 

FileOutputStream dbf = new FileOutputStream(new File(file.getPath(), "file1.dbf")); 
dbf.write(data1); 
dbf.close(); 

FileOutputStream dbt = new FileOutputStream(new File(file.getPath(), "file2.dbt")); 
dbt.write(data2); 
dbt.close(); 

fichier est correctement écrit sur la plupart des plates-formes (Windows, Android). Dans HEX-éditeur, il ressemble à ceci: enter image description here

Mais sur un seul appareil (YotaPhone2, modèle: YD201, 6.0.1 android) ce code avec les mêmes octets ne fonctionne pas correctement. octets non existants écrites dans le fichier:

enter image description here

Méthodes .getData1() et .getData2() fonctionne correctement. Ces méthodes écrivent simplement des données flottantes dans un tableau d'octets. Сode ressemble à ceci:

private static byte[] getData1(){ 
    int key = ...; 
    float[] buffer = new float[]{...}; 
    byte[] array = new byte[buffer.length * 4]; 
    byte[] bytes = new byte[4]; 

    for (int i = 0; i < buffer.length; i++) { 
     bytes = ByteBuffer.allocate(4).putFloat(buffer[i]).array(); 
     array[key + i * 4] = bytes[3]; 
     array[key + i * 4 + 1] = bytes[2]; 
     array[key + i * 4 + 2] = bytes[1]; 
     array[key + i * 4 + 3] = bytes[0]; 
    } 
    return array; 
} 

Avant d'envoyer à tableau FileOutputStream un tableau ressemble à ceci (obtenir de débogage):

enter image description here

Comment cela peut-il et comment puis-je résoudre ce problème?

+3

Le code "0D 0A" n'est-il pas le code pour CR/LF? Êtes-vous certain que le 'byte []' de 'getData()' n'a pas ces entrées? – KevinO

+3

Ma conjecture est que FileOutputStream fonctionne correctement, et que 0D octets sont dans les données. Vous devriez [modifier] votre question pour inclure les parties pertinentes de cette classe BD25Writer, et montrer d'où proviennent les données. – Kenster

+0

Merci pour la réponse. J'ai ajouté un peu plus d'informations. Je suis certain que l'octet [] de getData() est correct. Vérifié le débogueur. – gearquicker

Répondre

0

Il s'est avéré que tout le code fonctionne correctement. Le client de courrier a cassé le dossier pendant l'envoi.