2

RIM 圧縮 APIの使用中に奇妙な問題が発生しました。ドキュメントに記載されているように機能させることができません。win gzipツール
を使用してプレーンテキストファイルをgzipし、gzをblackberryプロジェクトのリソースに追加し、アプリで解凍しようとすると、無限ループが発生し、gzis.read()が-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)
{
}

圧縮されたコンテンツの後に、gzis.read() で 65535 値の繰り返しがあります。私が見つけた唯一の回避策は愚かです

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

しかし、私はその理由、私が間違っていること、そしてなぜ65535なのか知りたいです。

4

1 に答える 1

5

charは符号なしの 16 ビット データ型です。char への -1 キャストは 65535 です。

への変更:

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

そして、それはうまくいくはずです。char が -1 に等しくなることはないため、RIM の API の例は機能しない可能性があります。

于 2009-06-25T08:13:29.223 に答える