Mak*_*tar 2 compression gzip blackberry magic-numbers
我在使用RIM压缩API时遇到了一个奇怪的问题,我无法使其工作,因为它在文档中有描述.
如果我使用win gzip工具 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)
{
}
Run Code Online (Sandbox Code Playgroud)
在压缩内容之后,gzis.read()中重复65535值.我发现的唯一解决方法是愚蠢的
while ((c = (char)gzis.read()) != -1 && c != 65535)
Run Code Online (Sandbox Code Playgroud)
但我很好奇是什么原因,我做错了什么,为什么65535?
char是无符号的16位数据类型.-1转换为char是65535.
改成:
int i;
while ((i = gzis.read()) != -1)
{
sb.append((char)i);
}
Run Code Online (Sandbox Code Playgroud)
它应该工作.关于RIM的API的例子不可行,因为没有char将等于-1.
| 归档时间: |
|
| 查看次数: |
1160 次 |
| 最近记录: |