Pregunta

Hay un problema extraño al ejecutar API de compresión RIM , no puedo hacer que funcione como se describe en la documentación.
Si gzipé un archivo de texto sin formato usando win gzip tool , agregue gz a los recursos del proyecto blackberry y en la aplicación intente descomprímalo, habrá un bucle infinito, gzis.read () nunca devolverá -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)
{
}

Después del contenido comprimido, hay una repetición del valor 65535 en gzis.read (). La única solución que he encontrado es tonta

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

Pero tengo curiosidad por cuál es la razón, qué estoy haciendo mal y por qué 65535 ?

¿Fue útil?

Solución

char es un 16-bit sin firmar tipo de datos. -1 lanzado a un personaje es 65535.

Cambiar a:

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

Y debería funcionar. El ejemplo en la API de RIM no puede funcionar, ya que ningún carácter será igual a -1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top