使用SharedPreference和对象流存储对象

编写PreferencesUtils工具类可以简单对象(可以缓存对象中所有public的简单属性)

另外研究了Preference存储与直接采用对象文件缓存方式的区别

第一次写文件时

1、效率,直接缓存对象文件比Preference快

2、大小,直接缓存对象文件比Preference文件小

3、缓存目录不同,Preference缓存在shared_prefs下,对象文件则根据我们的设置可以选择目录

在设置中有两个操作

清除缓存:会将data/应用程序/caches目录下的文件删除

清除数据:会将除lib目录下的所有文件删除,包括shared_prefs

意味着,如果我们缓存对象文件时选择的目录不是caches下,采用files或其它目录,其与preference这仅有的劣势也消失了

为什么Preference操作比对象流慢,文件大。本质上都是读写文件操作,但是Preference采用的是xml形式存储,这就意味着有多余的节点和多余的转换。

第二次写的时候由于SharedPreferencesImpl 采用了其它机制,所以它会表现得非常快。

接下来要讨论的就是SharedPreference的存储原理,看看其缓存机制是否适合经常更改的内容的对象。

源码下载地址:https://github.com/AltasT/PreferenceVObjectFile

https://github.com/AltasT/PreferenceVObjectFile/archive/master.zip

时间: 2024-12-28 10:17:47

使用SharedPreference和对象流存储对象的相关文章

使用序列化和对象流实现对象的序列化

1 目标对象的类要实现 Serializable 接口  其成员若是引用类型 也必须实现Serializable 接口  若某个成员不需要序列化 transient 2 这个类可以实现复杂对象图的深度复制 1 import java.io.ByteArrayInputStream; 2 import java.io.ByteArrayOutputStream; 3 import java.io.ObjectInputStream; 4 import java.io.ObjectOutputStr

动车上的书摘-java对象流与序列化

动车上的书摘-java对象流与序列化 摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 钢笔不限贵便宜,书法是来自心对手的交流.-泥沙砖瓦浆木匠 一.对象序列化 当需要存储相同类型的数据,选择固定的长度记录是好选择.但是在面向对象(OOP)程序中,对象之间很少有全部相同的类型.所以,java语言支持一种称为对象序列化(object serialization)的机制. 下面展示一个序列化例子,关于两个对象 Em

对象流

对象流: 对象进行序列化(解释一): 所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值(字节序列)再生成相同状态的对象. 对象序列化(解释二):        当需要传输对象时,由于对象是很多属性和行为的封装,数据量很庞大.所以在传输对象之前需要将对象打散成字节序列,以利于传输,这个过程 称为序列化过程.到达目的地以后,又需要将字节序列还原成对象,这个过程称为反序列化过程. 如何实现序列化:       将需要传输的类,实现java.io.Serializable.这意味着该类的对

第二十六节(对象流,File类)

对象流可以将 Java 对象转换成二进制写入磁盘,这个过程通常叫做序列化,并且还可 以从磁盘读出完整的 Java 对象,而这个过程叫做反序列化. 对象流主要包括:ObjectInputStream 和 ObjectOutputStream 如何实现序列化和反序列化 如果实现序列化该类必须实现序列化接口 java.io. Serializable , 该接口没有任何方法, 该接口 只是一种标记接口,标记这个类是可以序列化的 /* 对象流: 对象流可以将java对象转换成二进制写入磁盘,这个过程叫做

对象流: ObjectInputStream 和 ObjectOutputStream

/* * 1.对象流: ObjectInputStream 和 ObjectOutputStream 一对. * 1) ObjectInputStream 对象的字节输入流类, ObjectOutputStream对象的字节输出流类. * 2) 功能: 实现对象的输入/输出. (存储到文件中的是对象,从相应的文件中读取的还是对象) * 3) 注意: 对象流属于处理流,因此,使用时必须将它套接在节点流上. * * 4) 要实现对象的存盘和读取必须具备什么条件? * a) 对象对应的类必须实现一个接

Java IO7:管道流、对象流

前言 前面的文章主要讲了文件字符输入流FileWriter.文件字符输出流FileReader.文件字节输出流FileOutputStream.文件字节输入流FileInputStream,这些都是常见的流类.当然除了这些流类之外,Java还提供了很多的流类给用户使用,本文就看一下别的流. 管道流 管道流主要用于连接两个线程的通信.管道流也分为字节流(PipedInputStream.PipedOutputStream)和字符流(PipedReader.PipedWriter).比如一个Pipe

redis存储对象与对象序列化详解

redis主要存储类型最常用的五种数据类型: String Hash List Set Sorted set redis存储对象序列化和反序列化 首先来了解一下为什么要实现序列化 为什么要实现序列化接口 当一个类实现了Serializable接口(该接口仅为标记接口,不包含任何方法定义),表示该类可以序列化.序列化的目的是将一个实现了Serializable接口的对象转换成一个字节序列,可以. 把该字节序列保存起来(例如:保存在一个文件里),以后可以随时将该字节序列恢复为原来的对象.甚至可以将该

Python标准库05 存储对象 (pickle包,cPickle包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢reverland纠错 在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我提到过Python"一切皆对象"的哲学,在Python中,无论是变量还是函数,都是一个对象.当Python运行时,对象存储在内存中,随时等待系统的调用.然而,内存里的数据会随着计算机关机和消失,如何将对象保存到文件,并储存在硬盘上呢? 计算机的内存中存储的是二进

Java序列化与对象流浅谈

今晚又重新回顾了Java中序列化与对象流的知识,接触了一位有着上亿行有效代码量的大佬之思想,2333. 1.序列化与反序列化 Java中的序列化简而言之就是为了避免要重复使用的实例在每次执行程序过程中都要重新申请堆空间,序列化后直接加载,节约时间.序列化过程中,保存在文件中的对象只记录了对象的状态(属性),包括成员和类类型(名称),而不会存储对象的方法.可看做将一个有着灵魂的人进行灵魂转移,转移的只是他的记忆,他自己的各种行为,比如吃饭.睡觉--,每个人都拥有,且行为表现一样,即只需转移(保存)