0

我的 java 代码不会传输我的 25mb 文件 - 它会在 16mb 处停止。我试图改变一切transferFrom 1 << 2448 & 31 & 8只是让情况变得更糟。任何的想法?

ReadableByteChannel rbc = Channels.newChannel(fileURL.openStream());
FileOutputStream fos = new FileOutputStream(path + fileName);
fos.getChannel().transferFrom(rbc, 0, 1 << 24);
fos.close();
4

2 回答 2

2

如果您使用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只下载有限数量的数据,因为不能保证所有数据都将在一个块中传输。

于 2013-01-19T22:51:36.927 回答
0

transferFrom 不能保证在一次调用中完成,尤其是在使用 URL 时。您需要循环调用它。

于 2013-01-19T17:44:49.423 回答