gpt4 book ai didi

java - 用 Java 下载多个文件

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

我有一个程序需要从网页下载小文本文件,我编写了以下代码来执行此操作:

URLConnection connection = null;    // Connection to the URL data
InputStreamReader iSR = null; // Stream of the URL data
BufferedReader bR = null; // Reader of URL data
URL url = null; // URL based on the specified link

// Open the connection to the URL web page
url = new URL(urlLink);
connection = url.openConnection();

// Initialize the Readers
iSR = new InputStreamReader(connection.getInputStream());
bR = new BufferedReader(iSR);

// Fetch all of the lines from the buffered reader and join them all
// together into a single string.
return bR.lines().collect(Collectors.joining("\n"));

不幸的是,我下载数据的服务器的 TTFB 等待时间很长。根据开发人员工具 (F12),总下载时间的大约 90% 是 TTFB。如果我要下载大量文件,这会使我的 Java 程序中的下载速度变得非常慢。基本上,对于每个文件,我们打开一个连接,等待 250 毫秒,下载,打开一个连接,再等待 250 毫秒,下载,这对于大量文件来说非常慢。我能够使用线程减少问题,这样我就有大约 10 个线程,每个线程下载我需要的所有文件的一部分。这加快了我的程序的速度,但并没有解决我遇到的根本问题。每个线程仍然需要打开一个连接,等待 250 毫秒,下载,然后重复。我理想的解决方案是以某种方式同时发送所有请求,并等待 250 毫秒 TTFB 时间完成,然后从网页单独下载所有数据。我能想到的唯一方法是创建 1000 个线程并在每个线程上打开一个 URL 连接,但这似乎是一个非常糟糕的方法。有没有其他方法可以打开多个 URL 连接并让 TTFB 周期同时发生?

最佳答案

我认为你走在正确的道路上。启动多个线程来减少总 TTFB 等待时间听起来是个好主意。为了避免启动大量线程,您可以考虑使用类似 Object Pool Pattern 的设计模式。将同时 Activity 的线程数量限制为一定数量。

关于java - 用 Java 下载多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43766531/

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