Android中用volley下载小文件

  最近在项目开发过程中使用到了Volley请求的网络框架,其中有一个需求是要批次量的下载更新音频文件,纵所周知volley不适合下载大文件,因为volley会 http 传输的数据一股脑读取到内存中,这样对于下载文件很容易造成oom,在我们的项目需求里边由于音频文件只有很小,只是单词的发音大约几kb的大小,所以在下载过程中成功实现了,talk is cheap,show me the code,我们下边用结果来说话。

public class  FileRequest extends Request {

private Response.ListenermListener;

private FileOutputStreamm Output;

private BufferedOutputStreamm BufferedOutput;

private Stringm ContentType;

private Stringm FileName;

public FileRequest(intmethod, String url, Response.Listener listener, Response.ErrorListener errorlistener) {

super(method, url, errorlistener);

mListener= listener;

}

public FileRequest(String url, Response.Listener listener, Response.ErrorListener errorlistener) {

this(Method.POST, url, listener, errorlistener);

}

public String getContentType() {

return mContentType;

}

publicString getFileName() {

return mFileName;

}

@Override

protected Response parseNetworkResponse(NetworkResponse response) {

byte[]data= response.data;

Mapheader= response.headers;

mContentType=header.get("Content-Type");

Stringa=header.get("Content-Disposition");

if(a!=null&&a.length() >=23) {

Strings=header.get("Content-Disposition").substring(22);

mFileName=s.substring(0,s.length() -1);

}else{

mFileName=null;

}

Stringparsed;

try{

//  parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));

parsed= ByteToStringUtils.bytesToHexString(data);

}catch(Exception e) {

parsed= ByteToStringUtils.bytesToHexString(data);

}

return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));

}

@Override

protected void deliver Response(String response) {

Log.i("set"," deliverResponse"+ response.toString());

mListener.onResponse(response);

}

}

  以上是我继承Volley中的Request类自己封装的下载音频文件的库,由于项目需求是post方式下载文件,所以在使用的过程中需要自己从response中判断返回的“Contnet_type”,如果不是则回调对应错误的方法,在使用过程中需要自己对流进行读写的操作,和文件的创建,在自定义下载文件的网络请求过程中,对http协议又有了更深一步的了解,也更加了解了volley的内部机制,demo地址github.com/kyle0101/volley

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • Volley源码分析之流程和缓存 前言 Android一开始提供了HttpURLConnection和HttpCl...
    大写ls阅读 634评论 0 6
  • 一.DownloadManager的介绍 1.Android涉及到的网络数据请求,如果是零星数据、且数据量较小(...
    少年的大叔心阅读 2,248评论 0 5
  • Volley框架 Volley是Google官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持HttpC...
    void_Zhao阅读 10,720评论 2 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399