每秒只下载一定数量的文件 - "decrease" 下载速度

Only download a certain amount of files per second - "decrease" the download speed

在我看来,我的服务器每秒只允许下载 60 个文件,但我有 63 个 - 都是很小的 YAML 文件。结果,最后 3 个文件没有下载并抛出错误 503。我正在使用 Baeldung 的 NIO 示例:

public static void downloadWithJavaNIO(String fileURL, String localFilename) throws MalformedURLException {
        String credit = "github.com/eugenp/tutorials/blob/master/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/download/FileDownload.java";

        URL url = new URL(fileURL);
        try (
            ReadableByteChannel readableByteChannel = Channels.newChannel(url.openStream());
            FileOutputStream fileOutputStream = new FileOutputStream(localFilename);
            FileChannel fileChannel = fileOutputStream.getChannel()
        ) {
            fileChannel.transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

我正在考虑将 currentTimeMillis 保存在某个地方,并检查在第 61 个文件挂起时是否已经过了一秒钟。但是还有其他好的想法吗?

FileChannel.transferFrom: An invocation of this method may or may not transfer all of the requested bytes.

所以我不确定它是否适用于所有情况。也许用那些小文件。

我会先尝试一个正确的 (non-optimized) 版本:

public static void downloadWithJavaNIO(String fileURL, String localFilename)
        throws MalformedURLException {
    URL url = new URL(fileURL);
    Path targetPath = Paths.get(localFilename);
    try (InputStream in = url.openStream()) {
        Files.copy(in, targetPath);
    } catch (IOException e) {
        System.getLogger(getClass().getName()).log(Level.ERROR, fileURL, e);
    }        
}
  • 现在有多快?还需要节流吗? (减速,等待)
  • 容量错误是否仍然存在?