JSOUP如何优秀的下载JPEG等二进制图像
引言
- JSOUP默认是不支持解析JPEG等二进制图像的,解决方法也很简单,只需要加上
Jsoup.ignoreContentType(true)这一行代码就可以。关于这一点的原因,来看看官方API说明。 - Connection (jsoup Java HTML Parser 1.11.3 API)
解释
- 连接ignoreContentType(boolean ignoreContentType)
在解析响应时忽略文档的内容类型。默认情况下,这是错误的,未识别的内容类型将导致抛出IOException。(例如,通过尝试解析JPEG二进制映像来防止产生垃圾)。设置为true以强制执行解析尝试,而不考虑内容类型。 - 参数:
ignoreContentType—如果您想要将响应解析为文档时忽略的内容类型设置为true。 - 返回:
这个连接,链接
完整示例
这个示例是完整下载一张 图片 的所有步骤。
@Test
public void test() throws IOException {
Response response = Jsoup.connect("http://sjbz.fd.zol-img.com.cn/t_s640x960c/g5/M00/0F/09/ChMkJlfJQcWIDXJEAAN5CfxwAOYAAU7hwBVxTQAA3kh337.jpg")
.ignoreContentType(true)
.method(Method.GET)
.execute();
byte[] bytes = response.bodyAsBytes();
File file = new File("D:\\img.png");
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(bytes);
fileOutputStream.flush();
fileOutputStream.close();
}
上面的方法很简单,但是我并不推荐使用。
- 原因:
- 我们有必要知道不带缓冲的操作,每读一个字节就要写入一个字节,由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低。带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里。等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高很多!
完美方案
@Test
public void test() throws IOException {
Response response = Jsoup.connect("http://sjbz.fd.zol-img.com.cn/t_s640x960c/g5/M00/0F/09/ChMkJlfJQcWIDXJEAAN5CfxwAOYAAU7hwBVxTQAA3kh337.jpg")
.ignoreContentType(true)
.method(Method.GET)
.execute();
//声明缓冲字节输入流
BufferedInputStream bufferedInputStream = response.bodyStream();
//缓冲字节输出流-》文件字节输出流-》文件
File file = new File("D:\\img.png");
FileOutputStream fileOutputStream = new FileOutputStream(file);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
//把缓冲字节输入流写入到输出流
byte[] b = new byte[1024]; //每次最多读1KB的大小
int length; //实际读入的字节
while ((length = bufferedInputStream.read(b))!=-1){
//写入到输出流
bufferedOutputStream.write(b,0,length);
}
//刷新缓冲的输出流。这将强制将任何缓冲的输出字节写入底层输出流。
bufferedOutputStream.flush();
bufferedInputStream.close();
}
JSOUP如何优秀的下载JPEG等二进制图像的更多相关文章
- k8s记录-下载k8s相关二进制包(一)
1)软件清单操作系统:CentOS7Kubernetes版本:v1.14.2flannel:v0.10.0ectd3:v3.3.11Docker版本:v18.09.0-ceDocker-compose ...
- Response.BinaryWrite()方法输出二进制图像
protected void Page_Load(object sender, EventArgs e) { FileStream fs = new FileStream(Server.MapPath ...
- DICOM医学图像处理:开源库mDCM与DCMTK的比較分析(一),JPEG无损压缩DCM图像
背景介绍: 近期项目需求,须要使用C#进行最新的UI和相关DICOM3.0医学图像模块的开发.在C++语言下,我使用的是应用最广泛的DCMTK开源库,在本专栏的起初阶段的大多数博文都是对DCMTK开源 ...
- 使用GDAL将下载的Google卫星图像转为带坐标的tif
网上有很多下载Google地图的卫片的软件,一般下载下来的图像都是jpg格式的,另外附带一个坐标信息的描述文件.这样的数据不能直接拿来在遥感或者GIS软件中使用,因为图像里面没有投影和坐标信息,所以就 ...
- [免费下载应用]iNeuKernel.Ocr 图像数据识别与采集原理和产品化应用
目 录 1..... 应用概述... 2 2..... 免费下载试用... 2 3..... 视频介绍... 2 4..... iNeuLink.Ocr图像数据采集应用... 2 5... ...
- 详细解读XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
本文主要参考:MDN 分析并操作 responseXML属性 如果你使用 XMLHttpRequest 来获得一个远程的 XML 文档的内容,responseXML 属性将会是一个由 XML 文档解析 ...
- 通读SDWebImage①--总体梳理、下载和缓存
本文目录 下载操作SDWebImageDownloaderOptions和下载过程实现 下载管理SDWebImageDownloader 缓存SDImageCache SDWebImageManage ...
- Jsoup 抓取和数据页 认识HTTP头
推荐一本书:黑客攻防技术宝典.Web实战篇 : 顺便留下一个疑问:能否通过jsoup大量并发訪问web或者小型域名server,使其瘫痪?其有用jsoup熟悉的朋友能够用它解析url来干 ...
- C# 中从网络上下载文件保存到本地文件
下面是C#中常用的从Internet上下载文件保存到本地的一些方法,没有太多的技巧. 1.通过 WebClient 类下载文件 WebClient webClient = new WebClien ...
随机推荐
- (网页)table加上分页,优点可随便加样式
1.先有静态的页面: <div class="col-xs-12"> <table id="tbtablesaleinfo" class=&q ...
- JHipster技术栈理解 - UAA原理分析
本文简要分析了UAA的认证机制和部分源码功能. UAA全称User Account and Authentication. 相关源码都是通过Jhipster生成,包括UAA,Gateway,Ident ...
- PHP的匿名函数和闭包
匿名函数 // Example1 $func = function( $param ) { echo $param; }; $func( 'some string' );//输出:some strin ...
- Spring MVC 异常处理 (九)
完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式) <dependency> ...
- 初识kafka
简介 Kafka经常用于实时流数据架构,用于提供实时分析.本篇将会简单介绍kafka以及它为什么能够广泛应用. kafka的增长是爆炸性的.2017年超过三分之一的世界五百强公司在使用kafk ...
- SQL 一列拆分多行
select a.col1,b.col2 from (select col1,col2=convert(xml,' <root> <v>'+replace(col2,',',' ...
- PHP中生产不重复随机数的方法
PHP内置函数不重复随机数 需求:要生成一个数组,这个数组里面有10个元素,都是整形,并且是1-60之间不重复的随机数. 代码: 代码示例: 1 2 3 4 5 6 7 8 9 10 ...
- Java入门(四):运算符优先级、关键字与保留字
上次介绍了Java的运算符,今天来介绍下运算符的优先级,以及Java的关键字.保留字. 一.运算符优先级 序号 运算符 名称 目数 结合性 说明 1 [ ] 方括号 从左向右 优先级最高 . 点号 双 ...
- winfrom之datagridview分页显示
这次datagridview绑定数据并分页操作,因为用到了webservice,所以代码会详细讲解.QueryByCondition是一个查询函数 客户端: PageData pageData=new ...
- keepalived 安装篇-个人实践-编译安装
官网地址:http://www.keepalived.org/官网文档:http://www.keepalived.org/documentation.html Keepalived的作用是检测服务器 ...