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 ?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top