用UrlConnection实现的下载

抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:

openConnection()connect()
对影响到远程资源连接的参数进行操作。与资源交互;查询头字段和内容。
---------------------------->
时间
  1. 通过在 URL 上调用 openConnection 方法创建连接对象。
  2. 处理设置参数和一般请求属性。
  3. 使用 connect 方法建立到远程对象的实际连接。
  4. 远程对象变为可用。远程对象的头字段和内容变为可访问。

使用以下方法修改设置参数:

  • setAllowUserInteraction
  • setDoInput
  • setDoOutput
  • setIfModifiedSince
  • setUseCaches

使用以下方法修改一般请求属性:

  • setRequestProperty

使用 setDefaultAllowUserInteraction setDefaultUseCaches 可设置 AllowUserInteractionUseCaches 参数的默认值。

上面每个 set 方法都有一个用于获取参数值或一般请求属性值的对应 get 方法。适用的具体参数和一般请求属性取决于协议。

在建立到远程对象的连接后,以下方法用于访问头字段和内容:

  • getContent
  • getHeaderField
  • getInputStream
  • getOutputStream

某些头字段需要经常访问。以下方法:

  • getContentEncoding
  • getContentLength
  • getContentType
  • getDate
  • getExpiration
  • getLastModifed

提供对这些字段的便捷访问。getContent 方法使用 getContentType 方法以确定远程对象类型;子类重写 getContentType 方法很容易。

一般情况下,所有的预连接参数和一般请求属性都可忽略:预连接参数和一般请求属性默认为敏感值。对于此接口的大多数客户端而言,只有两个需要的方法:getInputStreamgetContent,它们通过便捷方法镜像到 URL 类中。

 

示例:

public void down() throws Exception{

       //1.声明url

        URL url = new URL("http://localhost:8080/0515/down/01.avi");

        //2.获取urlconnection

        HttpURLConnection con = (HttpURLConnection)url.openConnection();

        //3.设置请求类型

        con.setRequestMethod("GET");

        //4.设置可以读写服务器的数据

        con.setDoInput(true);

        con.setDoOutput(true);

        //5.连接

        con.connect();

        //6.判断是否连接成功

        int code = con.getResponseCode();

        if(code==200){

         //获取服务器上要下载的数据是多少

         int  contentLength =con.getContentLength();

         System.err.println("大小:"+contentLength);

         //7.读取服务器返回的io

         InputStream in = con.getInputStream();

         byte[] b = newbyte[1024*256];

         int len = 0;

         int sum = 0;//下载总量

            OutputStream out = new FileOutputStream("f:/01.avi");

            while((len=in.read(b))!=-1){

             sum+=len;

             out.write(b,0, len);

             System.err.println(sum+"/"+contentLength);

            }

            out.close();

            in.close();

        }

        con.disconnect();

   }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值