Frage

Es ist ein seltsames Problem, das ich habe lief in mit RIM Kompression API , kann ich es nicht funktioniert, wie es in der Dokumentation beschrieben wird.
Wenn ich Textdatei mit gzip win gzip-Tool , fügen gz zu den Ressourcen von Blackberry-Projekt und in App versuchen, dekomprimieren, wird es unendliche Schleife sein, gzis.read () nie wieder zurückkehren -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)
{
}

Nach dem komprimierten Inhalt ist es Wiederholung von 65535 Wert in gzis.read (). Die einzige Abhilfe, die ich gefunden habe, ist stumm

while ((c = (char)gzis.read()) != -1 && c != 65535) 

Aber ich bin gespannt, was der Grund dafür ist, was mache ich falsch, und warum? 65535 ?

War es hilfreich?

Lösung

char ist ein unsigned 16-Bit Datentyp. -1 Umwandlung in einen char ist 65535.

Wechsel zu:

int i;
while ((i = gzis.read()) != -1)           
{
  sb.append((char)i);
}

Und es sollte funktionieren. Das Beispiel auf RIM-API kann unmöglich funktionieren, da kein Zeichen wird immer gleich -1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top