Jsoup.ignoreContentType(true)
這一行代碼就能夠。關於這一點的緣由,來看看官方API說明。這個示例是完整下載一張 圖片 的全部步驟。html
@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();
}
上面的方法很簡單,可是我並不推薦使用。java
- 緣由:
- 咱們有必要知道不帶緩衝的操做,每讀一個字節就要寫入一個字節,因爲涉及磁盤的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();
}