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:
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:
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):
Comment cela peut-il et comment puis-je résoudre ce problème?
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
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
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