package com.hunterliy.library.cache;
import android.util.Log;
import android.util.LruCache;
import com.google.gson.Gson;
import com.hunterliy.library.bean.JsonBean;
import java.io.UnsupportedEncodingException;
import rx.Observable;
import rx.Subscriber;
public class MemoryCache implements ICache {
private LruCache<String,String> mLruCache;
public MemoryCache(){
int memorySize = ((int)Runtime.getRuntime().maxMemory())/8;
mLruCache = new LruCache<String,String>(memorySize){
@Override
protected int sizeOf(String key, String value) {
try {
return value.getBytes("utf-8").length;
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return value.getBytes().length;
}
};
}
@Override
public <T extends JsonBean> Observable<T> get(final String key, final Class<T> clz) {
return Observable.create(new Observable.OnSubscribe<T>() {
@Override
public void call(Subscriber<? super T> subscriber) {
Log.e("cache", "记忆读取load from memory" + key);
String result = mLruCache.get(key);
if (subscriber.isUnsubscribed()){
return;
}
if(result ==null){
subscriber.onNext(null);
}else {
T t = new Gson().fromJson(result, clz);
subscriber.onNext(t);
}
subscriber.onCompleted();
}
});
}
@Override
public <T extends JsonBean> void put(String key, T t) {
if (null!=t)
Log.e("cache", "记忆存储save to memory: " + key);
mLruCache.put(key,t.toString());
}
}