BlackBerry - проблема с распаковкой GZip - PullRequest
2 голосов
/ 25 июня 2009

Есть странная проблема, с которой я столкнулся при использовании API сжатия RIM , я не могу заставить его работать, как описано в документации.
Если я скопирую простой текстовый файл с помощью win gzip tool , добавлю 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 ?

1 Ответ

5 голосов
/ 25 июня 2009

char - 16-разрядный тип данных без знака. -1 приведение к персонажу - 65535.

Изменить на:

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

И это должно работать. Пример API RIM не может работать, поскольку ни один символ не будет равен -1.

...