2009-06-25 175 views
2

我在使用RIM compression API时出现了一个奇怪的问题,我无法像在文档中描述的那样使它工作。
如果我gzip压缩使用win gzip tool纯文本文件,添加到广州黑莓项目的资源和应用程序试图解压,会出现无限循环,gzis.read()永远不会返回-1 ...黑莓手机 - GZip解压缩问题

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

回答

5

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

更改为:

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

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

+0

感谢Kevin,RIM揭秘!我应该更加小心:) – 2009-06-25 14:27:20