分享个 之前写好的 android 文件流缓存类,专门处理 ArrayList、bean。
转载麻烦声明出处:http://www.cnblogs.com/linguanh/
目录:
1,前序
2,作用
3,特点
4,代码
1,前序
在开发过程中,client 和 server 数据交流一般用到 json 格式传输数据。缓存机制,是任何一个优秀的 app 都必须存在的,android 的缓存数据的方法很多,无论是文本还是图像,我这里要讲的是我自己 编写 并 一直使用的, DataInfoCache 类。
2,本类作用
专门存储 ArrayList 种子数据,我举个 例子: List<UserInfo> mInfoBean = new ArrayList<>(); 这里的 bean 种子是 UserInfo 类,处理这里信息,我们一般是在接受完 server 的数据,例如 json 后,解析完 json,再通过 setXXX() 函数来存入,再用 getXXX() 获取。 在有网络的情况下,我们可以轻易 获取数据,没有网络呢? 那么我们就应该去获取缓存的。 那么问题就来了,要获取缓存,需要满足条件:
有网络时获取数据 ---> 先保存数据到本地,作为缓存;
没网络时 ---> 读取本地缓存;
目前到这里来说,本类的作用和 一般的 缓存类 没什么差别,OK,请看第三点。
3,特点
1,代码量少,通俗易懂,连带注释,不到 130 行;
2,存储时,直接 存储 List,读取时,直接读出 List , 直接用,无需 再解析。 下面举个例子
List<UserInfo> mInfoBean = new ArrayList<>();
saveListCache(mInfoBean,"我的缓存"); /** 存储 */
mInfoBean = loadListCache("我的缓存"); /** 获取 */
有没有觉得很快,我既不是 存储 json,也不是存储 文本,如果存储的是 json,读取的时候,你就还需要解析了,文本也是。
4,整页代码
内部注释丰富,相信你决定看得懂,而且,代码量真心少啊,功能强大。
package cn.share.bananacloud.common; import android.content.Context;
import android.util.Log; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList; /**
* Created by Administrator(林冠宏) on 2016/1/20.
*
* 本类 采用泛型 广泛接受 ArrayList 直接做缓存,即是开发中经常用到的 bean;
*
* 使用注意: 传进来的 ArrayList 所绑定的 种子,一定要是 已经继承 Serializable 接口的;
*
* 使用文本流做缓存。
*
*/ public class DataInfoCache { /** 定义一些你项目里面的 缓存文件名字 ,自定义,不要也没关系,调用函数再传入也行 */ public static String QzInfo = "Qz_List_Info";
public static String CyInfo = "Cy_List_Info";
private static String DataCache = "Data_Cache_File"; /**
* 保存 一组 数据
* @param ctx 上下文
* @param data 种子
* @param cacheName 缓存文件名
*/
public static<T> void saveListCache(Context ctx, ArrayList<T> data,String cacheName) {
new DataCache<T>().saveGlobal(ctx, data, cacheName);
} /**
* 直接根据 缓存文件名获取
* */
public static<T> ArrayList<T> loadListCache(Context ctx,String cacheName) {
return new DataCache<T>().loadGlobal(ctx,cacheName);
} /**
* 获取 一组 数据
* @param <T> 数据缓存 save or load
*/
static class DataCache<T> {
public void save(Context ctx, ArrayList<T> data, String name) {
save(ctx, data, name, "");
} public void saveGlobal(Context ctx, ArrayList<T> data, String name) {
save(ctx, data, name, DataCache);
} private void save(Context ctx, ArrayList<T> data, String name,String folder) {
if (ctx == null) {
return;
}
File file;
if (!folder.isEmpty()) {
File fileDir = new File(ctx.getFilesDir(), folder);
if (!fileDir.exists() || !fileDir.isDirectory()) {
fileDir.mkdir();
}
file = new File(fileDir, name);
} else {
file = new File(ctx.getFilesDir(), name);
}
if (file.exists()) {
file.delete();
}
Log.d("zzzzz", file.getAbsolutePath());
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(data);
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
} public ArrayList<T> load(Context ctx, String name) {
return load(ctx, name, "");
} public ArrayList<T> loadGlobal(Context ctx, String name) {
return load(ctx, name, DataCache);
} private ArrayList<T> load(Context ctx, String name, String folder) {
ArrayList<T> data = null; File file;
if (!folder.isEmpty()) {
File fileDir = new File(ctx.getFilesDir(), folder);
if (!fileDir.exists() || !fileDir.isDirectory()) {
fileDir.mkdir();
}
file = new File(fileDir, name);
} else {
file = new File(ctx.getFilesDir(), name);
}
Log.d("zzzzz","file "+file.getAbsolutePath());
if (file.exists()) {
try {
Log.d("zzzzz","write object");
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
data = (ArrayList<T>) ois.readObject();
ois.close();
} catch (Exception e) {
Log.d("zzzzz",e.toString());
}
}
if (data == null) { /** 如果没有 */
Log.d("zzzzz","data == null");
data = new ArrayList<T>();
}
return data;
}
}
}
打完收工,麻烦点个顶。
分享个 之前写好的 android 文件流缓存类,专门处理 ArrayList、bean。的更多相关文章
- 文件流FileStram类
本节课主要学习三个内容: 创建FileStram流 读取流 写入流 文件流FileStram类,是用来实现对文件的读取和写入.FileStram是操作字节的字节数组,当提供向文件读取和写入字节的方法时 ...
- android 文件读写工具类
将可以序列化的对象通过base64编码后进行保存 但是感觉多数情况下,不需要采用这个功能,直接保存原始的json字符串,取出来之后再进行解析即可 package com.wotlab.home.mon ...
- .net学习之集合、foreach原理、Hashtable、Path类、File类、Directory类、文件流FileStream类、压缩流GZipStream、拷贝大文件、序列化和反序列化
1.集合(1)ArrayList内部存储数据的是一个object数组,创建这个类的对象的时候,这个对象里的数组的长度为0(2)调用Add方法加元素的时候,如果第一次增加元神,就会将数组的长度变为4往里 ...
- 一个不错的PHP文件页面缓存类
在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考. 页面缓存类 <?php /* * 缓存类 cac ...
- 分享个刚写好的 android 的 ListView 动态加载类,功能全而代码少。
(转载声明出处:http://www.cnblogs.com/linguanh/) 简介: 该ListView 实现动态加载数据,为了方便用户充分地自定义自己的数据源.点击事件,等核心操作, ...
- 分享一下我写的.net 2.0的orm类,实现mvc。可以用于webform等环境中,这是orm的原理部分。
using System;using System.Collections.Generic;using System.Configuration;using System.Data;using Sys ...
- C#流总结(文件流、内存流、网络流、BufferedStream、StreamReader/StreamWriter、TextReader/TextWriter)
一.文件流 FileStream类主要用于读写磁盘文件.常用于向磁盘存储数据或读取配置文件. 读取文件: //文件流:读取 FileStream fileStream = File.Open(@&qu ...
- FileStream类的使用(文件流)
1.什么是FileStream类 FileStream 类对文件系统上的文件进行读取.写入.打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道.标准输入和标准输出.读写操作可以指定为同步 ...
- 文件流FileStream的读写
1.FileStream文件流的概念: FileStream 类对文件系统上的文件进行读取.写入.打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道.标准输入和标准输出.读写操作可以指定 ...
随机推荐
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- nodejs进阶(4)—读取图片到页面
我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...
- 我为什么要写LeetCode的博客?
# 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...
- C# 利用性能计数器监控网络状态
本例是利用C#中的性能计数器(PerformanceCounter)监控网络的状态.并能够直观的展现出来 涉及到的知识点: PerformanceCounter,表示 Windows NT 性能计数器 ...
- 常见CSS与HTML使用误区
误区一.多div症 <div class="nav"> <ul> <li><a href="/home/"> ...
- 转:serialVersionUID作用
汗,以前学了还忘了... Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本 ...
- 前端学HTTP之安全HTTP
前面的话 HTTP的主要不足包括通信使用明文(不加密),内容可能会被窃听:不验证通信方的身份,有可能遭遇伪装:无法证明报文的完整性,有可能被篡改 基本认证和摘要认证能够使得用户识别后较安全的访问服务器 ...
- .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍
1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...
- 微信小程序初探
做为码农相信大家最近肯定都会听到微信小程序,虽然现阶段还没有正式开放注册,但大家可以还是可以开发测试. 到微信的WIKI(http://mp.weixin.qq.com/wiki?t=resource ...
- C#开发微信门户及应用(39)--使用微信JSSDK实现签到的功能
随着微信开逐步开放更多JSSDK的接口,我们可以利用自定义网页的方式来调用更多微信的接口,实现我们更加丰富的界面功能和效果,例如我们可以在页面中调用各种手机的硬件来获取信息,如摄像头拍照,GPS信息. ...