File 复制大文件在颤振中不起作用

File 复制大文件在颤振中不起作用,file,flutter,copy,assets,large-data,File,Flutter,Copy,Assets,Large Data,我尝试为我的颤振应用程序使用665MB大小的数据库文件(SQLite文件)。 (该文件是必需的,因为它为公共交通应用程序提供离线数据。因此我无法将其缩小) 到目前为止,在flatter中使用任何SQLite文件时,我通常在代码中复制它。 文件的原始位置是/assets/db\u file.db。 文件的目标位置是文档目录 现在我有一个问题,文件副本不适用于我的665 MB大DB文件 这是由于文件太大而无法复制的代码 (对于较小的文件,此代码运行良好)…: (此外,在模拟器中,无论文件大小如何,代

我尝试为我的颤振应用程序使用665MB大小的数据库文件(SQLite文件)。 (该文件是必需的,因为它为公共交通应用程序提供离线数据。因此我无法将其缩小)

到目前为止,在flatter中使用任何SQLite文件时,我通常在代码中复制它。 文件的原始位置是
/assets/db\u file.db
。 文件的目标位置是
文档目录

现在我有一个问题,文件副本不适用于我的665 MB大DB文件

这是由于文件太大而无法复制的代码

(对于较小的文件,此代码运行良好)…:

(此外,在模拟器中,无论文件大小如何,代码都运行良好。问题只发生在实际的iPhone上)

问题:

  • 是否有任何方法可以改进我上面的代码,使其适用于非常大的文件,从而不会发生崩溃

  • 有没有办法首先在documents文件夹中提供db文件(作为捆绑包的一部分,即不需要复制)

  • 我该如何处理这么大的文件


我想这是因为内存不足。应该有一个
load
方法,该方法返回一个
,您可以通过管道将该流传输到
文件(dbPath)
,这样数据块就可以读写处理,直到复制完整个文件为止,而不是将整个文件加载到内存中,然后将其写回磁盘。不幸的是,AssetBundle似乎没有提供这样的方法。是的,这是非常不幸的!(无论如何,谢谢你的回答)!我的iPhone5S显然没有为dart提供的
root.load
方法提供足够的内存。我会在Java/ObjectC中实现文件副本,然后像在ah中解释的那样从Flatter中调用它-这是一个想法。我不知道您可以在flatter中调用Java/ObjC代码。谢谢你的提示,……我试试看!非常感谢你的链接,甘特。我很好地学习了flatter:)还有一个问题:插件世界(即iOS插件和Android插件)中的./asset文件夹的文件路径是什么?你是偶然知道的吗?
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);
}
ByteData data = await rootBundle.load("assets/largeFile.db");