BlackBerry - Problema con la decompressione di GZip
-
22-07-2019 - |
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 ?
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.