我在下面看到了示例APIas
public static byte[] compress( byte[] data )
{
try
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream gzipStream = new GZIPOutputStream( baos, 6, GZIPOutputStream.MAX_LOG2_WINDOW_LENGTH );
gzipStream.write( data );
gzipStream.close();
}
catch(IOException ioe)
{
return null;
}
return baos.toByteArray();
}
但是当我尝试使用Curve 8900 OS 4.6的大文件进行压缩时,我得到了一个“OutOfMemoryError”,所以我想知道如何压缩为一个chunk小数据?
我已经尝试过如下代码,但它不起作用,压缩文件无法解压缩...
file = (FileConnection)Connector.open(_fileOutputPath, Connector.READ_WRITE);
if (!file.exists()) {
file.create();
}
os = file.openOutputStream();
is = FileUtil.getInputStream(_fileInputPath, 0);
int tmpSize = 1024;
byte[] tmp = new byte[tmpSize];
int len = -1;
gzipStream = new GZIPOutputStream( os, 6, GZIPOutputStream.MAX_LOG2_WINDOW_LENGTH );
while((len = is.read(tmp, 0, tmpSize)) != -1) {
gzipStream.write(tmp, 0, len);
}
答案 0 :(得分:0)
GZIPOutputStream不会生成适合与gzip命令行工具一起使用的文件。这是因为它不会生成必要的文件头。你是如何测试解压缩的?您应该编写一个类似的Java程序,使用GZIPInputStream进行测试,因为'gunzip'不会识别输入。
答案 1 :(得分:0)
第一个代码示例的问题是ByteArrayOutputStream对于移动设备的有限内存来说太大了。
一个选项可能是首先写入SD卡上的文件(例如)。
第二个代码示例似乎很好,但请参阅Michael的回答。