BlackBerry - Problème avec la décompression GZip
-
22-07-2019 - |
Question
J'ai rencontré un problème étrange avec API de compression RIM , je ne peux pas le faire fonctionner comme il est décrit dans la documentation.
Si je gzip un fichier texte en utilisant gagner un outil gzip , ajoutez gz aux ressources du projet blackberry et essayez-le dans l'application décompressez-le, il y aura une boucle infinie, gzis.read () ne retournera jamais -1 ...
try
{
InputStream inputStream = getClass().getResourceAsStream("test.gz");
GZIPInputStream gzis = new GZIPInputStream(inputStream);
StringBuffer sb = new StringBuffer();
char c;
while ((c = (char)gzis.read()) != -1)
{
sb.append(c);
}
String data = sb.toString();
add(new RichTextField(data));
gzis.close();
}
catch(IOException ioe)
{
}
Après le contenu compressé, la valeur 65535 est répétée dans gzis.read (). La seule solution que j'ai trouvée est stupide
while ((c = (char)gzis.read()) != -1 && c != 65535)
Mais je suis curieux de savoir quelle est la raison, ce que je fais de travers et pourquoi 65535 ?
La solution
char est un caractère non signé 16 bits Type de données. -1 cast sur un personnage est 65535.
Changer en:
int i;
while ((i = gzis.read()) != -1)
{
sb.append((char)i);
}
Et ça devrait marcher. L'exemple de l'API de RIM ne peut pas fonctionner, car aucun caractère ne sera jamais égal à -1.