gpt4 book ai didi

dart - 如何在 dart 中异步提取 zip 文件存档?

转载 作者:行者123 更新时间:2023-12-03 02:48:24 29 4
gpt4 key购买 nike

我正在使用 archive打包以扩展 zip 文件,如下所示:

  final bytes = new File(zippedFile).readAsBytesSync();
final archive = new ZipDecoder().decodeBytes(bytes);

for (var file in archive) {
final filename = '/Users/mark/blah/${file.name}';
if (file.isFile) {
var outFile = new File(filename);
outFile = await outFile.create(recursive: true);
await outFile.writeAsBytes(file.content);
} else {
await new Directory(filename)
.create(recursive: true);
}
}

问题是我在 Flutter 中的 UI 线程不时挂起,导致 CircularProgressIndicator 卡顿 - 我怀疑问题是对 file.content 的调用。如何在不阻塞 UI 线程的情况下调用它?我需要使用隔离吗?

最佳答案

如果使用 Flutter,这是基于 Günter Zöchbauer 评论的一种解决方案:

  final bytes = new File(zippedFile).readAsBytesSync();
final archive = new ZipDecoder().decodeBytes(bytes);

for (var file in archive) {
final filename = '/Users/mark/blah/${file.name}';
if (file.isFile) {
final decompressed = await compute(decompressArchiveFile, file);
var outFile = new File(filename);
outFile = await outFile.create(recursive: true);
await outFile.writeAsBytes(decompressed);

} else {
await new Directory(filename)
.create(recursive: true);
}
}

这是 decompressArchiveFile功能:
List<int> decompressArchiveFile(ArchiveFile file) {
return file.content;
}

这有效,但速度大约是 sync 的 5 倍方法。

关于dart - 如何在 dart 中异步提取 zip 文件存档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52520744/

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