HttpURLConnection的使用

最近在做项目时遇到一个需求,就是上传文件时展示上传进度,但是项目所里用的网络框架是Retrofit。很不凑巧,这货能上传文件,但无法获取上传进度。这时面前摆着两种选择,第一是扩展现有的Retrofit框架,第二是采用别的网络框架。如果采用第一种方案的话需要扒Retrofit源码,在其源码基础上进行扩展,但这样做的话很费时费力,一切未知。所以我就决定采取第二种方案,用最原始的网络框架进行编写,即不需要额外再依赖别的开源框架。
AnroidSDK本身自带两种网络框架HttpClient和HttpURLConnection,但Google在API23之后放弃了HttpClient的支持推荐使用HttpURLConnection,所以顺势而为我也决定采用HttpURLConnection,就这样开始了我的HttpURLConnection钻研之路。

1.基本的网络请求
HttpURLConnection urlConnection = null;
        try {
            URL url = new URL("http://www.android.com/");
            urlConnection = (HttpURLConnection) url.openConnection();
            InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        //    读取响应的流
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(urlConnection != null){
                urlConnection.disconnect();
            }
        }
2.输出到服务端

1.建立链接并setDoOutput()设置为true,表明是输出模式,默认值是false;
2.如果预先知道输出流的长度则调用setFixedLengthStreamingMode(),若不知道时调用setChunkedStreamingMode()。否则HttpURLConnection将被迫在传输完整的请求体之前在内存中缓冲,从而浪费(并且可能耗尽)堆和增加延迟。

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
   try {
     urlConnection.setDoOutput(true);
     urlConnection.setChunkedStreamingMode(0);

     OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
     writeStream(out);

     InputStream in = new BufferedInputStream(urlConnection.getInputStream());
     readStream(in);
   } finally {
     urlConnection.disconnect();
   }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 家门口有两棵树,一棵是桂花树,另外一棵也是桂花树。 树底下有大理石做成的石凳,给这看似单调的生长增添了一下趣味。闲...
    你不再欣赏我阅读 419评论 0 0
  • 雨夜 诗:芥园主人非台 光已退却 黑暗落下 灯 扫射出夜—— 的条形码 一些影影绰绰的人形 或者—— 其他 随着淅...
    芥园主人阅读 74评论 0 0
  • 前子 女孩子,一旦渐大了些许,便如漂泊在水上的木船,总想...
    三世清欢结阅读 422评论 3 1
  • 1. 每年我都和马云有一个几亿的项目合作,并在除夕夜分红:第3次集五福又开始了。 早上刚到公司,看见同事们打开电脑...
    楼上的姨阅读 337评论 0 2

友情链接更多精彩内容