Bonjour,
Afin de réduire la quantité d'informations à stocker je voudrais passer par le système suivant :
- un heure en minute (de 0 à 1440) sous la forme de 11 bits (ex 00000010000 = 16 minutes),
- un type de 0 à 7 sous la forme de 3 bits (ex 010 = type 2)
pour cela je veux concaténer les deux chaines de bits puis les transformer en tableau de char pour les stocker dans la base. Pour cela, je fais :
String bits = Integer.toBinaryString(time+(int)Math.pow(2,11)).substring(1) + Integer.toBinaryString(type+(int)Math.pow(2,3)).substring(1) + "00"
bits représente donc 16 caractères 0 ou 1.
Ensuite je transforme en tableau de 2 char :
1 2 3
| char[] chars = new char[2];
chars [0] = (char)Integer.parseInt(bits.substring(0,8), 2);
chars [1] = (char)Integer.parseInt(bits.substring(8,16), 2); |
Je fais cela plusieurs fois, en récuperant tous les tableaux de char dans un string
String toSave += String.valueOf(charTo);
Jusqu'ici tout va bien...
Par contre quand je veux sotcker ca dans la base (mysql) :
statement.setObject(3,activities,Types.VARCHAR);
il me rajoute des octets "parasites", (exemple, pour la caractère 0xa4 il marque 0xc382c2a4)
J'ai essayé aussi ca,
statement.setBytes(3,activities.getBytes());
La j'ai moins de "parasites" mais j'en ai toujours...
Je pense qu'il y a une raison pour qu'il soit la mais je ne trouve rien qui m'aiderai à résoudre le soucis...
Si quelqu'un pouvait me donner un coup de main ca serait sympa !
Merci d'avance.
Partager