gpt4 book ai didi

java - 使用 XZ Java for android 获取提取百分比

转载 作者:行者123 更新时间:2023-11-30 02:24:54 29 4
gpt4 key购买 nike

我正在使用 XZ Java 库,用于在 Android 上提取大小约为 16MB 的 .xz 文件。我将提取/解压缩代码作为 AsyncTask 运行,因此,我想通过 onProgressUpdate(Integer ... values) 方法查看提取百分比。

我的解压代码看起来像这样。

        byte[] buf = new byte[8192];
String name = null;

try {
name = "my_archive.xz";
InputStream in = getResources().openRawResource(R.raw.my_archive);//new FileInputStream(name); //
FileOutputStream out = openFileOutput("my_archive.sqlite", Context.MODE_PRIVATE);

label = (TextView)findViewById(R.id.textLabel);
try {
in = new XZInputStream(in);

label.setText("Writing db file.");
int size;
while ((size = in.read(buf)) != -1) {
out.write(buf,0,size);
progress++;
publishProgress(progress);
}

}
catch (Exception e)
{
System.err.println("Input Stream error: "+e.getMessage());
}
finally {
// Close FileInputStream (directly or indirectly
// via LZMAInputStream, it doesn't matter).
in.close();
}


} catch (FileNotFoundException e) {
System.err.println("LZMADecDemo: Cannot open " + name + ": "
+ e.getMessage());
System.exit(1);

} catch (EOFException e) {
System.err.println("LZMADecDemo: Unexpected end of input on "
+ name);
System.exit(1);

} catch (IOException e) {
System.err.println("LZMADecDemo: Error decompressing from "
+ name + ": " + e.getMessage());
System.exit(1);
}

progress 变量实际上应该保存百分比值。如果有人使用过这个库,并且你找到了计算进度百分比的简单方法,请在这里帮助我。

在此先感谢您的帮助。

最佳答案

我尝试在输入流上使用 available() 方法获取存档文件的大小,如下所示。

InputStream in = getResources().openRawResource(R.raw.my_archive);
int fileSize = in.available();

在提取过程中,我计算了如下进度:

                int size;
int counter=0;
while ((size = in.read(buf)) != -1) {
out.write(buf,0,size);
counter++;
progress = (int) (counter*100*1024/(double)fileSize);
publishProgress(progress);
}

但是,出于某种原因,这并没有导致正确的进展。在完成之前,进度高达 108%。我知道我在这里做错了,所以请通过正确的计算来改进这个答案。

谢谢

关于java - 使用 XZ Java for android 获取提取百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28007705/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com