2009-06-25 165 views
2

我在使用RIM compression API時出現了一個奇怪的問題,我無法像在文檔中描述的那樣使它工作。
如果我gzip壓縮使用win gzip tool純文本文件,添加到廣州黑莓項目的資源和應用程序試圖解壓,會出現無限循環,gzis.read()永遠不會返回-1 ...黑莓手機 - GZip解壓縮問題

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) 
{ 
} 

壓縮後的內容在gzis.read()中重複出現65535的值。我發現的唯一的解決方法是啞巴

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

不過我很好奇,是什麼原因,我做錯了什麼,爲什麼65535

回答

5

char是一個無符號的16位數據類型。 -1強制轉換爲char是65535

更改爲:

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

,它應該工作。 RIM API的示例不可能工作,因爲沒有char將等於-1。

+0

感謝Kevin,RIM揭祕!我應該更加小心:) – 2009-06-25 14:27:20