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,890評論 18 139
  • Volley源碼分析之流程和緩存 前言 Android一開始提供了HttpURLConnection和HttpCl...
    大寫ls閱讀 636評論 0 6
  • 一.DownloadManager的介紹 1.Android涉及到的網絡數據請求,如果是零星數據、且數據量較小(...
    少年的大叔心閱讀 2,253評論 0 5
  • Volley框架 Volley是Google官方出的一套小而巧的異步請求庫,該框架封裝的擴展性很強,支持HttpC...
    void_Zhao閱讀 10,720評論 2 2
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,760評論 18 399