-----------------------------------------------------------------------------------java
轉載:http://blog.csdn.net/crazy__chen/article/details/46612901android
-----------------------------------------------------------------------------------數組
在上篇文章中,咱們最終經過網絡,獲取到了HttpResponse對象緩存
HttpResponse是android包裏面的一個類,而後爲了更高的擴展性,咱們在BasicNetwork類裏面看到,Volley將其包裝成一個Volley本身的對象NetworkResponse網絡
另外,在BasicNetwork類中咱們也注意到,對HttpResponse包裝成NetworkResponse的過程當中,使用HttpResponse的Inputstream,將數據保存在一個byte[]數組中。this
BasicNetwork代碼片斷:spa
這樣可能形成的一個問題,就是內存溢出,這也是Volley之因此不能用來下載大文件的緣由,由於byte[]是保存在內存中的。.net
好了,下面讓咱們來看NetworkResponse的源碼設計
本質上沒有什麼特別的,只是將HttpResponse的內容,簡單地轉移到NetworkResponse中code
接下來,在響應分發過程當中,request負責把NetworkResponse又包裝成Response<T>對象
NetworkDispatcher代碼片斷:
至於怎麼解析,不一樣的request應該有本身的實現。
可能看到這裏你們有些迷糊,緣由是咱們找回了以前類的一些代碼
在前面的解析中,咱們老是忽略這些片斷,默認爲全都是Response,由於在前面的過程當中,理解Response之間的不一樣會給咱們理解核心代碼帶來困擾,因此咱們都跳過了。
如今源碼解析接近尾聲,咱們再回頭看各類各樣的Response就豁然開朗了。
httpStack得到的是HttpResponse,因爲HttpResponse是android的內置類,咱們使用起來很是不靈活(由於咱們但願response都是同樣的,不管是從緩存中取的仍是網絡請求的)
根據上述緣由,咱們有了NetworkResponse,這個表明網絡請求相應,這是Volley的自定義類,這樣咱們使用起來就靈活了(理論上緩存也應該有一個CacheResponse,然而Volley沒有這樣設計)。更加劇要的一點是NetworkResponse中的byte[]數組保存了網絡數據(前面說過,這是形成內存溢出的緣由)
最後,爲了統一全部的Response,咱們將NetworkResponse(理論上還有一個CacheResponse)又封裝成了了Response<T>
OK,Volley解析基本到這裏就結束了。接下來的文章,將會帶你們看一下Volley最後的一部分小花絮,關於圖片加載的部分。
另外,我還會根據本身的理解,帶你們來改造Volley,使之有更多更完善的功能。