2009-06-25 11 views
2

RIM compression APIを使用して実行したときに奇妙な問題が発生しました。ドキュメントに記載されているとおりに動作させることはできません。
私はブラックベリープロジェクトのリソースにGZを追加し、win gzip toolを使用してテキストファイルをgzipやアプリでそれを解凍しようとすると、無限ループがあるだろう、gzis.read()を返すことはありません-1 ...BlackBerry - 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 demystified!私はもっ​​と慎重でなければなりません:) –

+0

古い質問ですが、今日は私を助けました。 –