美文网首页
Android中用volley下载小文件

Android中用volley下载小文件

作者: 写代码的闲篇 | 来源:发表于2017-08-11 13:07 被阅读0次

      最近在项目开发过程中使用到了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

    相关文章

      网友评论

          本文标题:Android中用volley下载小文件

          本文链接:https://www.haomeiwen.com/subject/wbclrxtx.html