oschina安卓源代码解析(五)两个文件缓存的方法
来源:互联网 发布:网络超级红人节盛典 编辑:程序博客网 时间:2024/04/27 18:43
这里讲下缓存:
一般缓存有几种:1、用数据库来做缓存sqlite 2、另外一种是文件缓存
我这里讲下os的文件缓存。
基本上是这样:从服务器读取数据时候,譬如读取前几节讲的news新闻内容,读取之后把xml转换成数据流,
再把数据流转换为新闻实体类的集合。拿到这个实体类的集合List<News> 之后我们就把它保存下来,生成一个文本文件。
上面这个就可以清楚看到java的反序列化的操作,把一个文件读取并转换成一个实体类
============================
说了这么多,其实缓存就是把网络地址以xml读取时候,生成一个文件放在手机data/data/包名/files/下面
等下次再读取时候,就不用再去服务器请求,一个是读取数据更快,还有一个省了读取网络数据的流量。
一般缓存有几种:1、用数据库来做缓存sqlite 2、另外一种是文件缓存
我这里讲下os的文件缓存。
基本上是这样:从服务器读取数据时候,譬如读取前几节讲的news新闻内容,读取之后把xml转换成数据流,
再把数据流转换为新闻实体类的集合。拿到这个实体类的集合List<News> 之后我们就把它保存下来,生成一个文本文件。
这节讲得就是怎么把List<News>转换成一个文件放在手机里面
/** * 保存对象 缓存 ser变成file文件 * @param ser * @param file * @throws IOException */ public boolean saveObject(Serializable ser, String file) { //文件输出流 FileOutputStream fos = null; //对象输出流 ObjectOutputStream oos = null; try{ fos = openFileOutput(file, MODE_PRIVATE); oos = new ObjectOutputStream(fos); oos.writeObject(ser); oos.flush(); return true; }catch(Exception e){ e.printStackTrace(); return false; }finally{ try { oos.close(); } catch (Exception e) {} try { fos.close(); } catch (Exception e) {} } }
上面代码的关键就是 openFileOutput这个方法,方法有两个参数,第一个是文件名,第二个是创建的这个文件属性,这个文件是否
为其他app文件访问。
这个方法创建的文件将放在手机的data/data/包名/files/file下面
最后一个file就是上面的文件名,所以上面的方法是实现了把List<News>转化成data/data/包名/files/file文件
我们只要调用 saveObject这个方法,把实体类或者集合放进去就可以生成一个文件。
那我们怎么下次再读取此文件并把文件内容转换成一个实体类或者集合呢
/** * 读取对象 * @param file * @return * @throws IOException */ public Serializable readObject(String file){ if(!isExistDataCache(file)) return null; FileInputStream fis = null; ObjectInputStream ois = null; try{ fis = openFileInput(file); ois = new ObjectInputStream(fis); return (Serializable)ois.readObject(); }catch(FileNotFoundException e){ }catch(Exception e){ e.printStackTrace(); //反序列化失败 - 删除缓存文件 if(e instanceof InvalidClassException){ File data = getFileStreamPath(file); data.delete(); } }finally{ try { ois.close(); } catch (Exception e) {} try { fis.close(); } catch (Exception e) {} } return null; }
上面这个就可以清楚看到java的反序列化的操作,把一个文件读取并转换成一个实体类
============================
说了这么多,其实缓存就是把网络地址以xml读取时候,生成一个文件放在手机data/data/包名/files/下面
等下次再读取时候,就不用再去服务器请求,一个是读取数据更快,还有一个省了读取网络数据的流量。
0 0
- oschina安卓源代码解析(五)两个文件缓存的方法
- oschina客户端安卓研究(三)两个文件缓存的方法
- oschina安卓源代码解析(二)AndroidManifest
- oschina安卓源代码解析(七)java序列化来处理缓存
- oschina安卓源代码解析(六)主页解析 1、登陆
- oschina安卓源代码解析(一)前言、下载
- oschina安卓源代码解析(三)xml方式传递数据
- oschina安卓源代码解析(四)构造新闻实体类
- oschina安卓源代码解析(八)main.java分析
- 安卓开发文件缓存方法的具体实现
- 安卓缓存文件
- 安卓 两个获取ip的方法
- 安卓开发文件缓存方法的具体实现(参考代码)
- 安卓源代码获取方法
- 安卓 文件与缓存
- Okhttp解析(五)缓存的处理
- 【oschina android源码分析】缓存的设计
- Oschina 安卓客户端源码学习之一
- nginx window 安装 配置 访问
- Xcode设置项之Architectures和Valid Architectures
- Android target 分析
- iOS-核心动画高级编程/1-图层树
- libgdx 自动适应分辨率的方法
- oschina安卓源代码解析(五)两个文件缓存的方法
- 权威黑客知识讲座(一):初识黑客
- MYSQL 索引----B-Tree和全文索引
- 静态方法和类成员方法
- Android NDK 概览
- 陕西文物保护学院彩画在园林建筑中的应用
- Machine Learning 学习笔记
- 约翰·卡马克 FPS之父
- ubuntu安装后的一些操作