Pergunta

Há um problema estranho que eu correr em usar RIM compressão API , não posso fazê-lo funcionar, como é descrito na documentação.
Se eu gzip arquivo de texto simples usando vitória gzip ferramenta , adicione gz aos recursos de projeto de amora e no aplicativo tentar descompactá-lo, haverá loop infinito, gzis.read () nunca retorna -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)
{
}

Depois do conteúdo comprimido há repetição de 65535 valor em gzis.read (). A única solução que eu encontrei é mudo

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

Mas estou curioso o que é a razão, o que estou fazendo de errado, e por 65535 ?

Foi útil?

Solução

carvão animal é um sem sinal de 16 bits tipo de dados. -1 fundido a um char é 65.535.

Change to:

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

E ele deve funcionar. O exemplo na API da RIM não pode possivelmente trabalho, como nenhuma CHAR sempre igual -1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top