我在从 HTTP 服务器下载文件时遇到了一个小问题。下面的代码仅下载约 30MB 的文件(文件大小为 52MB)。我的浏览器下载文件没有任何问题。怎么了?
URL website = new URL("http://www.website.com/information.asp");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("information.html");
fos.getChannel().transferFrom(rbc, 0, 1 << 24);
Run Code Online (Sandbox Code Playgroud)
FileChannel.transferFrom() Java 文档说:
将字节从给定的可读字节通道传输到此通道的文件中。
尝试从源通道读取 count 个字节,并将它们写入该通道的文件,从给定位置开始。调用此方法可能会也可能不会传输所有请求的字节;是否这样做取决于渠道的性质和状态。如果源通道的剩余字节数少于 count 个字节,或者如果源通道是非阻塞的并且其输入缓冲区中立即可用的字节数少于 count 个,则将传输少于请求的字节数。
URL website = new URL("http://www.website.com/information.asp");
URLConnection connection = website.openConnection();
ReadableByteChannel rbc = Channels.newChannel( connection.getInputStream());
FileOutputStream fos = new FileOutputStream("information.html" );
long expectedSize = connection.getContentLength();
System.out.println( "Expected size: " + expectedSize );
long transferedSize = 0L;
while( transferedSize < expectedSize ) {
transferedSize +=
fos.getChannel().transferFrom( rbc, transferedSize, 1 << 24 );
System.out.println( transferedSize + " bytes received" );
}
fos.close();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |