【问题标题】:BlackBerry - Problem with GZip decompressionBlackBerry - GZip 解压缩问题
【发布时间】:2009-06-25 06:48:51
【问题描述】:

我在使用 RIM compression API 时遇到了一个奇怪的问题,我无法按照文档中的描述让它工作。
如果我使用win gzip tool gzip纯文本文件,将gz添加到黑莓项目的资源中,然后在应用程序中尝试解压它,会出现无限循环,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

【问题讨论】:

    标签: blackberry compression gzip magic-numbers


    【解决方案1】:

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

    改为:

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

    它应该可以工作。 RIM 的 API 上的示例不可能工作,因为没有 char 永远等于 -1。

    【讨论】:

    • 感谢凯文,RIM 揭秘!我应该更加小心:)
    • 天啊..老问题,但今天才帮助我。
    猜你喜欢
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2012-02-12
    • 2013-09-24
    相关资源
    最近更新 更多