繁体   English   中英

如何在flutter http、dio或flutter_downloader上调整下载缓冲区大小?

[英]How to adjust download buffer size on flutter http, dio or flutter_downloader?

在此处输入图像描述

我想下载一个大约300MB的大文件。 它比我想象的要慢很多,当我查看日志时,我看到它正在获取大小约为8KB的字节。 即使我寻找其他颤振库,我也没有找到调整下载缓冲区大小的方法。 我该如何调整?

您可以使用ChunkedStreamReader使用自定义 chunkSize(例如 64KB)处理响应流并将其写入文件。 另请参阅此 GitHub 问题

在下面的示例中,它将以流的形式侦听响应,然后从 ChunkedStreamReader 读取具有所需块大小(64*1024 = 64KB)的字节,并将获取的块写入文件。

// Download file
try {
  int offset = 0;
  var httpClient = http.Client();
  var request = http.Request('GET', Uri.parse(url));
  var response = httpClient.send(request);

  // Open file
  File file = File('$downloadPath.tmp');

  response.asStream().listen((http.StreamedResponse r) async {
    final reader = ChunkedStreamReader(r.stream);
    try {
      // Set buffer size to 64KB
      int chunkSize = 64 * 1024;
      Uint8List buffer;
      do {
        buffer = await reader.readBytes(chunkSize);
        // Add buffer to chunks list
        offset += buffer.length;
        print('Downloading $filename ${downloaded ~/ 1024 ~/ 1024}MB');
        // Write buffer to disk
        await file.writeAsBytes(buffer, mode: FileMode.append);
      } while (buffer.length == chunkSize);

      // Rename file from .tmp to non-tmp extension
      await file.rename(downloadPath);
      print('Downloaded $filename');
    } catch (e) {
      print(e);
    } finally {
      reader.cancel();
    }
  }).onDone(() async {
    // do something when finished
  });
} catch (error) {
  print('Error downloading: $error');
}

在此处输入图片说明

我想下载一个大约300MB的大文件。 这比我想象的要慢得多,当我查看日志时,我发现它正在获取大小约为8KB字节。 我没有找到一种方法来调整下载缓冲区的大小,即使我正在寻找其他Flutter库也是如此。 我该如何调整?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM