我尝试为Flutter应用程序使用665 MB大小的数据库文件(SQLite文件)。 (该文件是必需的,因为它为公共交通应用程序提供了离线数据。因此,我不能将其缩小)。
到目前为止,在Flutter中使用任何SQLite文件时,我通常都将其复制为代码。
文件的原始位置是./assets/db_file.db
。
文件的目标位置是DocumentsDirectory
。
现在我遇到的问题是该文件副本不适用于665 MB的大型数据库文件。
这是我的代码由于文件太大而无法复制。
(对于较小的文件,此代码效果很好)...:
(同样,在Simulator中,无论文件大小如何,代码都能正常工作。问题仅在实际的iPhone上发生)...
Directory directory = await getApplicationDocumentsDirectory();
var dbPath = join(directory.path, "destinationFile.db");
if (FileSystemEntity.typeSync(dbPath) == FileSystemEntityType.notFound) {
ByteData data = await rootBundle.load("assets/largeFile.db");
List<int> bytes =
data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(dbPath).writeAsBytes(bytes);
}
对于我的665 MB文件,以上代码崩溃-没有错误消息:/
它崩溃的代码行如下:
ByteData data = await rootBundle.load("assets/largeFile.db");
问题:
对于任何超大文件,有什么方法可以改进我的上述代码,以免发生崩溃?
有什么方法可以在文档文件夹内首先提供db文件(作为捆绑软件的一部分,即无需复制)?
无论如何我应该如何处理这么大的文件?