关于Java下载网络图片的问题启示

晚上心血来潮,想要换一换电脑桌面,并且想自己用Java写网络代码来下载,权当练一练手感:
在这里插入图片描述
很快打完代码(当然你也可以不用线程):

import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Main {
    public static void main(String[] args) {
        new Thread(() -> {
            try {
                URL url = new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1595353623093&di=772aafbd60f0cfc4ecdc8eaa4c5a1143&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2Fd%2F571ec93e032e3.jpg");
                InputStream in = url.openStream();
                byte[] b = new byte[1024];
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("C://Users//xxx//Desktop//" + System.currentTimeMillis() + ".jpg"));
                while (in.read(b) != -1) {
                    out.write(b);
                }
                in.close();
                out.close();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

非常简单的一份代码,就是获得一个网络输入流和一个输出文件流,将输入的字节输出到outputStream,就可以得到jpg,然而,却发现jpg与原来的jpg发生了色彩和位置上的变化:
在这里插入图片描述
后来将代码改成如下形式,神奇地发现图片竟然正常了:

在这里插入图片描述

在这里插入图片描述
知其然还要知其所以然,当然还是先从官方文档入手:
Java的OutputStream一共有三个重载的write方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里我们可以看出一些蛛丝马迹,划红线文字就是说:write (byte[] b) 和 write(byte[] b, 0, b.length)是等效的,但是我们现在开的byte数组长是1024,write进去的时候,就可能写入了多余的0数据,这样就会导致写入数据问题。

对Java还在逐渐热身,力争通过这个暑假能做到娴熟使用Java编程,加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值