Android 資料緩衝-檔案儲存體,android檔案儲存體

來源:互聯網
上載者:User

Android 資料緩衝-檔案儲存體,android檔案儲存體

Android APP開發過程中,我們通常會加入緩衝模組。緩衝即在本地儲存APP的一些資料,大部分是將網路請求的資料進行本地儲存,這樣在快取資料有效期間內就可以直接使用快取資料,降低了APP和伺服器的壓力,也極大提升了使用者體驗。Android資料緩衝既可以以資料表的形式進行儲存,也可以以檔案的形式進行緩衝。這裡我主要通過快取檔案儲存資料,並在APP下一次啟動時讀取。

Usage

整個Cache模組的設計思想很簡單,每個快取資料都對應一個key,每個快取資料又會被存到以此key命名的檔案中,需要時直接讀取。關鍵類分別為CacheData, CacheManager, CacheUtils

  • CacheData:資料封裝類,所有欲緩衝的資料都通過CacheData封裝,CacheData中能夠定義緩衝有效期間,並可以通過getData()直接擷取真實的快取資料。
  • CacheManager: 緩衝管理類,單例模式設計,負責緩衝的儲存和讀取。
  • CacheUtils: 緩衝常用類,所有的緩衝Key都應該在這個類中定義,此類還定義了一些時間常量,緩衝有效期間中可以使用。

使用方法如下:

  • step1: CacheManager.init(Context context), 在APP載入時就應該對CacheManager初始化。
  • step2: 自訂的Model需要實現序列化,使用CacheData進行封裝,然後使用CacheManager進行儲存和讀取。
Source

CacheUtils.java 主要用來存放一些常用變數

public class CacheUtils {    public final static String KEY_TEST = "key_test";    public final static long EXPIRATION_MINUTE = 60 * 1000;    public final static long EXPIRATION_HOUR =  60 * EXPIRATION_MINUTE;    public final static long EXPIRATION_DAY =  24 * EXPIRATION_HOUR;    public final static long EXPIRATION_WEEK = 7 * EXPIRATION_DAY;}

CacheData.java 用來儲存的資料結構

import java.io.Serializable;public class CacheData<T> implements Serializable {    private long lastUpdated;    private String key;    private T data;    private long expiration;    public CacheData(String key, T data) {        this(key, data, -1);    }    public CacheData(String key, T data, long expiration) {        this.key = key;        this.expiration = expiration;        setData(data);    }    public void setData(T data) {        this.data = data;        this.lastUpdated = System.currentTimeMillis();    }    public boolean isValid() {        return expiration == -1 || lastUpdated + expiration > System.currentTimeMillis();    }    public String getKey() {        return key;    }    public T getData() {        return data;    }}

CacheManager.java 讀取與儲存緩衝

import android.content.Context;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class CacheManager {    private static CacheManager instance;    private static Context mContext;    public static void init(Context context) {        mContext = context;    }    private CacheManager() {    }    public static CacheManager getInstance() {        if (instance == null) instance = new CacheManager();        return instance;    }    public void addCache(CacheData cacheData) {        if (cacheData == null) return;        try {            File file = new File(mContext.getCacheDir(), cacheData.getKey());            if (!file.exists()) {                file.createNewFile();            }            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));            oos.writeObject(cacheData);            oos.close();        } catch (IOException e) {            e.printStackTrace();        }    }    public CacheData getCache(String key) {        try {            File file = new File(mContext.getCacheDir(), key);            if (file == null) return null;            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));            CacheData cacheData = (CacheData) ois.readObject();            ois.close();            if (cacheData.isValid()) return cacheData;        } catch (IOException e) {            e.printStackTrace();        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        return null;    }}
Code Download

項目代碼託管在Github Repo中,歡迎star和fork。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.