每秒只下载一定数量的文件 - "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);
}
}
- 现在有多快?还需要节流吗? (减速,等待)
- 容量错误是否仍然存在?
在我看来,我的服务器每秒只允许下载 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);
}
}
- 现在有多快?还需要节流吗? (减速,等待)
- 容量错误是否仍然存在?