如果您使用Java7
,您可以使用花哨的java.nio.file.Files
工具来复制。
URL url = new URL("http://www.stackoverflow.com");
try (InputStream is = url.openStream()) {
Files.copy(is, Paths.get("/tmp/output.tmp"));
}
如果你没有,你可以使用开源工具——例如来自 Apache(FileUtils
在 Commons IO 中搜索)。
如果你想坚持使用当前的解决方案,你可以这样写:
BufferedInputStream bis = new BufferedInputStream(url.openStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(
"/tmp/output2.tmp"));
byte[] buffer = new byte[1024 * 1024];
int read = 0;
while ((read = bis.read(buffer)) != -1) {
bos.write(buffer, 0, read);
}
bos.close();
bis.close();
目的是您必须阅读直到到达流的末尾。这就是为什么您transferFrom
只下载有限数量的数据,因为不能保证所有数据都将在一个块中传输。