java三级缓存代码 java一级缓存二级缓存和三级缓存的区别( 二 )


int code = conn.getResponseCode();
if (code == 200) {
// 相应成功,获得网络返回来的输入流
InputStream is = conn.getInputStream();
// 图片的输入流获取成功之后,设置图片的压缩参数,将图片进行压缩
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;// 将图片的宽高都压缩为原来的一半,在开发中此参数需要根据图片展示的大小来确定,否则可能展示的不正常
options.inPreferredConfig = Bitmap.Config.RGB_565;// 这个压缩的最小
// Bitmap bitmap = BitmapFactory.decodeStream(is);
Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);// 经过压缩的图片
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 断开连接
conn.disconnect();
}
return null;
}
}
三级缓存的使用关于图片的处理,必不可少要用到三级缓存技术 。
什么是三级缓存?
三级缓存一般分为内存--本地--网络三级缓存
内存(手机内存):内存相对于磁盘缓存,速度会快很多,但是缺点就是容量较小,不能存储大容量数据 , 且容易被系统回收 。LruCache
磁盘(SD卡):相对于内存来说存储空间很大,能够存储较多的数据 。DiskLruCache(DiskLruCache是非Google官方编写,但获得官方认证的硬盘缓存类,该类没有限定在Android内,所以理论上 Java 应用也可以使用DiskLreCache来缓存 。)
网络:服务器端,通过HTTP请求获得 。
具体流程就是,同一张图片从网络获取一次 , 然后在本地缓存下来,之后加载同一张图片的时候就从缓存中去加载 。
先在内存中查找,找到就进行加载 , 否则去磁盘查找 , 找到将图片添加到内存中 , 加载显示,否则从网络加载,并且缓存到内存和磁盘 , 并返回 。这就是完整的三级缓存过程 。
这里需要介绍的是内存缓存一共分为四类:强引用、软引用、弱引用和虚引用(后面我会再专门整理一篇博客的~)
到这里三级缓存应该大概明白了吧,下面是我写的实现demo
Activity和布局文件都比较简单 , 布局中只有一个imageView,实例化上面个工具类,调用loadBitmap方法即可,这里就不贴出来了 。
第一次打开时log信息:
关闭后打开log信息:
以上是三级缓存的使用 。
java如何获取cpu的一二三级缓存信息可以利用jdk自带的API获取信息:(只支持jdk1.60以上的版本)
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.List;
import mytools.com.sun.management.OperatingSystemMXBean;
import mytools.java.io.File;
import mytools.java.lang.management.ManagementFactory;
/**
* 获取windows系统信息(CPU,内存,文件系统)
* @author libing
*
*/
public class WindowsInfoUtil {
private static final int CPUTIME = 500;
private static final int PERCENT = 100;
private static final int FAULTLENGTH = 10;
public static void main(String[] args) {
System.out.println(getCpuRatioForWindows());
System.out.println(getMemery());
System.out.println(getDisk());
}
//获取内存使用率
public static String getMemery(){
OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
// 总的物理内存+虚拟内存
long totalvirtualMemory = osmxb.getTotalSwapSpaceSize();
// 剩余的物理内存
long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize();
Double compare=(Double)(1-freePhysicalMemorySize*1.0/totalvirtualMemory)*100;

推荐阅读