首页 / JAVA / Java使用URL类下载的图片不完整
Java使用URL类下载的图片不完整
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java使用URL类下载的图片不完整,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2264字,纯文字阅读大概需要4分钟。
内容图文
问题
今天在使用URL类来下载网站中的图片的时候,出现了一个问题:下载的图片不完整,并且每次下载的图片大小也不是都相同,反正就是不完整。
问题代码如下:
package cn.ganlixin.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; public class Test { public static void main(String[] args) throws IOException { URL url = new URL("http://www.baidu.com/favicon.ico"); URLConnection conn = url.openConnection(); // 设置user-agent,预防403 conn.setRequestProperty("user-agent", "Chrome/73.0.3683.86"); InputStream _is = conn.getInputStream(); byte[] data = new byte[1024*1024]; // 1M // 一次性下载 int length = _is.read(data); OutputStream _os = new FileOutputStream(new File("favicon.ico")); _os.write(data, 0, length); _os.flush(); System.out.println("下载 " + url + " 共" + length + "字节内容"); } }
运行多次,输出如下:
下载 http://www.baidu.com/favicon.ico 共5440字节内容 下载 http://www.baidu.com/favicon.ico 共16495字节内容 下载 http://www.baidu.com/favicon.ico 共13455字节内容
上面要下载图片的完整大小应该是16.6KB,但是上面测试多次都没有下载完整。
刚开始还以为是接收数据的byte数组长度不够,但是当我设置为1M的时候,依旧下载不完整,这就有点不解了。
网上查了一些资料说是输出的时候没有flush,但是计算的下载的数据长度呀,这和输出是否进行了flush是没有关系的。。
解决方式
后来我该用了多次read,而不是向上面的代码中一次read,计算总和,这个时候就没有出现数据不完整的情况了。
package cn.ganlixin.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; public class Test { public static void main(String[] args) throws IOException { URL url = new URL("http://www.baidu.com/favicon.ico"); URLConnection conn = url.openConnection(); conn.setRequestProperty("user-agent", "Chrome/73.0.3683.86"); InputStream _is = conn.getInputStream(); byte[] data = new byte[1024*100]; // 100KB int tot = 0; int length = 0; OutputStream _os = new FileOutputStream(new File("demo.png")); // 采用多次read的方式 while ((length = _is.read(data)) != -1) { tot += length; _os.write(data, 0, length); } _os.flush(); System.out.println("下载 " + url + " 共" + tot + "字节内容"); } }
运行多次,结果如下:
下载 http://www.baidu.com/favicon.ico 共16958字节内容 下载 http://www.baidu.com/favicon.ico 共16958字节内容 下载 http://www.baidu.com/favicon.ico 共16958字节内容
数据完整了,但是我还是没有明白上面的那个问题出在哪里。
原文:https://www.cnblogs.com/-beyond/p/10621242.html
内容总结
以上是互联网集市为您收集整理的Java使用URL类下载的图片不完整全部内容,希望文章能够帮你解决Java使用URL类下载的图片不完整所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。