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 ...
随机推荐
- leetcode-9.回文数(水仙花数)
leetcode-9.回文数(水仙花数) 题意:给定整数,判断是否是水仙花数(回文数),返回判断结果 算法: 1.判断负数, 如果是负数直接返回false 2.将整数逐位拆解,用数组存储 3.遍历数组 ...
- Hive中笔记 :三种去重方法,distinct,group by与ROW_Number()窗口函数
一.distinct,group by与ROW_Number()窗口函数使用方法 1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重. (1)当distinct应用到多个 ...
- Linux系统挂载Windows的共享文件夹
解决方案 在window上文件设置共享权限 在Linux上在 使用mount 命令挂载 Windows 共享文件夹 实验环境 redhat linux 7操作系统 服务器IP 192.168.100. ...
- ServletContextListener的作用
ServletContextListener是对ServeltContext的一个监听.servelt容器启动,serveltContextListener就会调用contextInitialized ...
- Java面试知识点之线程篇(一)
前言:在Java面试中,一定会遇到线程相关问题,因此笔者在这里总结Java中有关线程方面知识点,多数从网上得来(文中会贴出主要参考链接),有些也是笔者在面试中所遇到的问题,如有错误,请不吝指正.主要参 ...
- 5.01-requests_auth
import requests # 发送post请求 data = { } response = requests.post(url, data=data) # 内网 需要 认证 auth = (us ...
- 一入python深似海--class
python class 分为三个部分:class and object(类与对象),inheritance(继承),overload(重载)and override(覆写). class and o ...
- Linux之RTOS学习
Linux之RTOS学习 RTOS: Real time operating system 系统选型 可选方案 RTLinux - FSMLabs, WindRiver Systems - http: ...
- Redo丢失的4种情况及处理方法
这篇文章重点讨论Redo丢失的几种情况,及每种情况的处理方法. 一.说明:1.以下所说的当前日志指日志状态为CURRENT,ACTIVE,非当前日志指日志状态为INACTIVE2.不用考虑归档和非归档 ...
- 阿里云配置tomcat https
阿里云申请免费的SSL证书和配置https,可参考该篇博文:https://blog.csdn.net/baidu_19473529/article/details/70037976 虽然有现成的,不 ...