Domanda

C'è uno strano problema che ho riscontrato usando API di compressione RIM , non riesco a farlo funzionare come descritto nella documentazione.
Se gzip file di testo semplice utilizzando strumento gzip , aggiungi gz alle risorse del progetto blackberry e in app prova a decomprimilo, ci sarà un ciclo infinito, gzis.read () non restituirà mai -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)
{
}

Dopo il contenuto compresso c'è ripetizione del valore 65535 in gzis.read (). L'unica soluzione che ho trovato è stupida

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

Ma sono curioso di sapere qual è la ragione, cosa sto facendo di sbagliato e perché 65535 ?

È stato utile?

Soluzione

char è un segno senza segno, 16 bit tipo di dati. -1 cast su un carattere è 65535.

Cambia in:

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

E dovrebbe funzionare. L'esempio sull'API di RIM non può funzionare, poiché nessun carattere sarà mai uguale a -1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top