BlackBerry - Проблема с распаковкой GZip

Я столкнулся со странной проблемой, используя 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)
{
}

После сжатого содержимого повторяется значение 65535 в gzis.read(). Единственный обходной путь, который я нашел, это глупо

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

Но мне интересно, в чем причина, что я делаю не так и почему 65535< /а>?


person Maksym Gontar    schedule 25.06.2009    source источник


Ответы (1)


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

Изменить на:

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

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

person Kevin Montrose    schedule 25.06.2009
comment
Спасибо, Кевин, RIM демистифицирован! Я должен быть более осторожным :) - person Maksym Gontar; 25.06.2009
comment
О боже... старый вопрос, но помог мне только сегодня. - person Henrik P. Hessel; 21.07.2009