BlackBerry - проблема с распаковкой GZip
-
22-07-2019 - |
Вопрос
Есть странная проблема, с которой я столкнулся при использовании API сжатия RIM , я не могу заставить его работать, как описано в документации.
Если я распакую обычный текстовый файл с помощью инструмента win 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 ?
Решение
char является 16-разрядным без знака тип данных. -1 приведение к персонажу равно 65535.
Изменить на:
int i;
while ((i = gzis.read()) != -1)
{
sb.append((char)i);
}
И это должно работать. Пример API RIM не может работать, поскольку ни один символ не будет равен -1.