DiskLruCache的簡單用法

2021-07-10 01:12:10 字數 1656 閱讀 8488

1 建立disklrucache快取物件

四個引數的含義:

3)1個key對應幾個快取內容,一般傳1

4)快取使用的磁碟空間大小

用法示例:

第乙個引數,設定使用的cache目錄

string path = context.getexternalcachedir().getabsolutepath();

string dirname = 「imageloadercache」;

file file = new file(path,dirname);

packageinfo info =context.getpackagemanager().getpackageinfo(context.getpackagename(),0);

int version = info.versioincode;

2 向disklrucache中存入檔案

向disklrucache中快取內容的方式與寫入偏好設定檔案時非常類似。先獲得乙個editor物件,然後通過editor物件快取內容,快取完畢後要提交commit。

1)先要獲得乙個editor物件

disklrucache.editor editor = cache.edit(key);

其中cache是disklrucache的例項,key為一會兒使用editor進行檔案儲存時使用的鍵。該key一般又要獲得的的路徑來表示(將路徑轉為md5字串)

2)接下來呼叫editor的newoutputstream方法。獲得乙個輸出流物件。將要快取的內容以inputstream的方式流到該outputstream物件中。newoutputstream方法需要乙個int引數,這個引數的意思是:建立editor物件的時候需要乙個key,而建立disklrucache物件的時候指定了乙個key對應幾個快取內容,這裡的int值指的就是,接下來即將快取的內容是該key對應的第幾個內容。如果乙個key只對應乙個快取內容,則這裡傳入0。

outputstream out = editor.newoutputstream(0);

bitmap.compress(compress.jpeg,100,out);

流操作完畢後,務必提交一下:

editor.commit();

3)最後在快取完畢後,還要提交一下剛才操作的日誌檔案

cache.flush();

3 從disklrucache中讀取快取內容

1)利用disklrucache的get方法獲得指定key對應的內容,但是該內容是以disrklrucache.snapshot型別來呈現的

snapshot snap = cache.get(key);

2) 要獲取snapshot中的具體內容,需要呼叫snapshot的getinputstream方法獲得乙個輸入流,以io流的方式獲得具體內容。

inputstream in = snap.getinputstream(0);

getinputstream方法同樣需要乙個int型別的引數,該引數的意義與之前editor物件獲得輸出流時提供的引數意義相同,不再贅述。

bitmap bitmap = bitmapfactroy.decodestream(in);

4 其他的一些相關api

remove(key) 移除指定key對應的所有快取內容

delete() 移除所有快取內容

本地快取DiskLruCache學習總結

第乙個指快取位址,第二個是版本號,第三個是乙個key可以快取檔案的個數,第四個是快取的最多位元組的資料。開起乙個disklrucache的方法 disklrucache mdisklrucache null try catch ioexception e catch nosuchalgorithme...

簡單的設計不簡單

最近看了 簡約至上 這本書,這本文章總結一下。推薦給對互動設計感興趣的童鞋。話說簡單 首先人們喜歡簡單 值得信賴 適應性強的產品。所以我們才會費盡心力去設計簡單的產品。人們喜歡簡單的產品原因有 1 產品的功能越多,就越難發現真正對使用者有價值的新功能。2 因為增加的複雜性導致他們很難找到自己真正需要...

簡單的設計不簡單

最近看了 簡約至上 這本書,這本文章總結一下。推薦給對互動設計感興趣的童鞋。話說簡單 首先人們喜歡簡單 值得信賴 適應性強的產品。所以我們才會費盡心力去設計簡單的產品。人們喜歡簡單的產品原因有 1 產品的功能越多,就越難發現真正對使用者有價值的新功能。2 因為增加的複雜性導致他們很難找到自己真正需要...