我有一个大的数据文件,它是压缩的,大约20MB。解压缩后,大约可达50MB。以下源代码工作正常。我在其他地方发现了网页上的原创内容,并对其进行了一些修改。这个方法在AsyncTask.doInBackground中被调用。我应该如何解压缩AsyncTask.doInBackground中的大数据文件?
所以,我想知道的是,我怎样才能保存正在进行的状态(对不起,我不知道正确的英文单词)并在稍后恢复过程?我的意思是,这种方法需要很长时间(在模拟器上大概需要一分钟),而且我知道因为数据非常庞大,所以没有办法。所以,如果这个方法的主要活动被杀死了,我想保存解压缩文件的当前状态,并且当活动激活时,我想从最后一点恢复解压缩。希望我的解释清楚我的意图。
我在想使用服务,但我也想与UI进行交互,比如显示进度等。当我大致扫描参考资料时,我无法在服务中找到有用的信息,但在服务中有没有办法做到这一点?你认为我应该使用它吗?
无论如何,我的主要观点是如何恢复解压文件。
private final static int CHUNK_SIZE = 32 * 1024;
byte[] _fileIOBuffer = new byte[CHUNK_SIZE];
public void unzipFile(DBFileDownloader downloader, File zipFile, String directory)
throws IOException
{
ZipInputStream in = null;
FileOutputStream os = null;
try
{
in = new ZipInputStream (new FileInputStream(zipFile));
ZipEntry entry = null;
while ((entry = in.getNextEntry())!= null)
{
String entryName = entry.getName();
if (entry.isDirectory()) {
File file = new File (directory, entryName);
file.mkdirs();
}
else {
File file = new File(directory, entryName);
if (file.exists()){
file.delete(); // I don't know how to append, so delete it always
}
os = new FileOutputStream (file);
int bytesRead = 0;
while ((bytesRead = in.read (_fileIOBuffer))!= -1) {
os.write(_fileIOBuffer, 0, bytesRead);
// progress procedure
}
os.close();
}
}
}
catch (FileNotFoundException e) {
Log.v("unzip", e.getMessage());
}
catch (IOException e) {
Log.v("unzip", e.getMessage());
}
finally{
if (in != null){
in.close();
}
if (os != null){
os.close();
}
}
}
由于提前, yokyo
+1分享代码 – Pentium10 2010-06-19 07:55:03
感谢分享代码!我一直在寻找这个很长很长的时间! – Force 2011-12-08 22:16:45