第一种
public static void test1() throws IOException {
InputStream is = null;
FileOutputStream fos = null;
String imgUrl = "https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=611475378,380931383&fm=26&gp=0.jpg";
String outputStreamDir = "D:/test/88.png";
float timeout = 5f;
try {
// 构造URL
URL url = new URL(imgUrl);
// 打开连接
URLConnection con = url.openConnection();
Float time = timeout * 1000;
// 设置请求超时为5s
con.setConnectTimeout(time.intValue());
// 输入流
is = con.getInputStream();
File create = new File(outputStreamDir);
File fileParent = create.getParentFile();
if (fileParent != null && !fileParent.exists()){
fileParent.mkdir();
}
fos = new FileOutputStream(create);
// 读取到的数据长度
int len;
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 开始读取
while ((len = is.read(bs)) != -1) {
fos.write(bs, 0, len);
}
//while (is.read(bs) != -1) {//这个输出有bug,图片会不完整
// fos.write(bs);
//}
}catch (Exception e){
}finally {
// 完毕,关闭所有链接
if (is != null){
is.close();
}
if (fos != null){
fos.close();
}
}
}
第二种
public static void test2() throws IOException {
FileOutputStream fos = null;
String imgUrl = "https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=611475378,380931383&fm=26&gp=0.jpg";
String outputStreamDir = "D:/test/88.png";
float timeout = 5f;
try {
// 构造URL
URL url = new URL(imgUrl);
// 打开连接
URLConnection con = url.openConnection();
Float time = timeout * 1000;
// 设置请求超时为5s
con.setConnectTimeout(time.intValue());
File create = new File(outputStreamDir);
File fileParent = create.getParentFile();
if (fileParent != null && !fileParent.exists()){
fileParent.mkdir();
}
fos = new FileOutputStream(create);
BufferedImage image = ImageIO.read(url);
ImageIO.write(image,"jpg",fos);
}catch (Exception e){
}finally {
// 完毕,关闭所有链接
if (fos != null){
fos.close();
}
}
}
主要是写入文件调用的方法不同.
每一种在下载1万个图片大概45秒
每二种在下载1万个图片大概140秒