BlackBerry - GZip解压缩问题

时间:2009-06-25 06:48:51

标签: blackberry compression gzip magic-numbers

我使用RIM compression API时遇到了一个奇怪的问题,我无法按照文档中的描述使其正常工作。
如果我使用win gzip tool gzip纯文本文件,将gz添加到blackberry项目的资源中并在app中尝试解压缩,将会有无限循环,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 个答案:

答案 0 :(得分:5)

char是一种无符号的16位数据类型。 -1转换为char为65535。

更改为:

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

它应该有效。关于RIM的API的例子不可行,因为没有char将等于-1。