Java使用URL类下载的图片不完整
问题
今天在使用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字节内容
数据完整了,但是我还是没有明白上面的那个问题出在哪里。
Java使用URL类下载的图片不完整的更多相关文章
- java之URL类
Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平台现在已经可 以对国际互联网以及URL资源进行访问了.Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷.我们 ...
- Java的URL类(二)
转:https://www.cnblogs.com/brokencolor/p/8575440.html Java的URL类(二) 实例: Java 通过HttpURLConnection Post方 ...
- Java的URL类(一)
转:https://www.cnblogs.com/blackiesong/p/6182038.html Java的URL类(一) Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平 ...
- Java-->利用URL类下载图片
--> 通过get 请求访问图片地址,将通过服务器响应的数据(即图片数据)存到本地文件中... --> HttpURLConnectionUtil 工具类 package com.drag ...
- Java 使用URL类通过url下载网络资源
主要用到的类 地址类: URL http类: HttpURLConnection 输入流: InputStream 输出流: FileOutputStream 上代码 package com.demo ...
- Java的URL来下载网页源码
import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; impor ...
- 使用JAVA的URL类处理url事例
import java.net.*; import java.io.*; public class ParseURL { public static void main(String[] args) ...
- java.net.URL类
package com.mozq.boot.kuayu01.demo; import java.net.MalformedURLException; import java.net.URL; publ ...
- Java中的URL类
Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平台现在已经可 以对国际互联网以及URL资源进行访问了.Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷.我们 ...
随机推荐
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)
缘起 时间真快,现在已经是这个系列教程的下半部 Vue 第 12 篇了,昨天我也简单思考了下,可能明天再来一篇,Vue 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...
- Abp框架之执行Update-Database 命令系列错误
废话不多说,直接开门见山.首先的 第一个错误:一般都是,碰到这个问题不要慌,先不要急着去查看sql服务是否开启,首先按F5启动项目,报错之后直接终止项目,然后再执行Update-Database命令 ...
- Linux~学习笔记目录索引
回到占占推荐博客索引 本篇文章是对自己学习Linux及在它的环境下部署工具的一个总结,以方便自己查阅,也给他人一个帮助,本文章同时会不断的更新,欢迎大家订阅! 本目录包括的内容会包括linux基础命令 ...
- JavaScript夯实基础系列(四):原型
在JavaScript中有六种数据类型:number.string.boolean.null.undefined以及对象,ES6加入了一种新的数据类型symbol.其中对象称为引用类型,其他数据类 ...
- js获取url 中的值,并跳转相应页面
实现方法:一:获取URL带QUESTRING参数的JAVASCRIPT客户端解决方案,相当于asp的request.querystring,PHP的$_GET1.函数: <Script lang ...
- 【转】解决未能加载文件或程序集'WebGrease‘的问题
在多个视图中,如果有使用共用的样式代码,可以把它们移至CSS文件中去.今天Insus.NET就举例一个例子来说明. 比如前2篇中<ASP.NET MVC图片管理(上传,预览与显示)>htt ...
- Nginx支持 React browser router
修改nginx配置文件,添加try_file配置如下,即可实现对 React browser router 的支持. location / { root /var/www/mysite; try_fi ...
- 超大文本文件浏览器Snaptext,支持不限制大小的文本文件浏览
文本文件超过1G就很少有软件可以打开了,超过10G就只有有限的几个可以打开了,那20G.30G.100G呢? Snaptext超大文本浏览器,应该是世界上最快速的文本文件浏览器,它支持基本不限制大小的 ...
- 给萌新的Flexbox简易入门教程
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://www.sitepoint.com/flexbox-css-flexible-bo ...
- 48.Odoo产品分析 (五) – 定制板块(3) – 修改文件和报告(1)
查看Odoo产品分析系列--目录 不管ERP系统中的内置报表有多完善,大多数的公司仍然需要对文档和报表进行一些自定义的修改. 这一章节将介绍如何对报表的页眉和页脚做自定义修改:odoo框架如何组织报 ...