- 浏览: 30635 次
- 性别:
- 来自: 上海
最新评论
-
QING____:
...
关于京东畅读卡的盈利模式猜想 -
ggjucheng:
www.svn999.com 这个速度听不错的,稳定性也好,主 ...
找到一个免费的svn空间 -
ray_linn:
关羽很挫的样子.
电影赤壁的几大败笔 -
脑袋雷劈的:
浪费感情浪费钱~
鉴定完毕
电影赤壁的几大败笔 -
malphi:
想想从这几年无极、十面埋伏开始,哪个国产大片不烂的?所以凡是说 ...
电影赤壁的几大败笔
用 Preferences API 存储对象 转载自:http://javan.blogbus.com/logs/2004/07/263540.html |
<nobr>英文原文</nobr> | ||
如果您的数据可以表示为简单对象,那么可以使用这个 API 来存储 Greg Travis (mito@panix.com) Preferences API,一种在 JDK 1.4 中引入的轻型的、跨平台的持久性 API,是为存储少量数据(字符串、简单字节数组等)而设计的,它不是为了要成为传统数据库的一个接口。不过,如果您的数据可以表示为一个简单的对象,那么它可以成为一个高效的存储设备。本文介绍了这个 API,解释了对象是如何存储的,并展示了所进行的过程,提供了完成这些工作的代码库。 Preferences API 是轻型的、跨平台的持久性 API,它是在 JDK 1.4中引入的。它不是为了为传统数据库引擎提供一个接口,而是用恰当的、操作系统特定的后端以实现真正的持久性。这个 API 是用来存储少量数据的。事实上,它的名字本身就表明它通常用于存储用户特定的设置或者首选项,如字体大小或者窗口布局(当然,您可以在其中存储任何您想要存储的内容)。 Preferences API 设计为存储字符串、数字、布尔值、简单字节数组等。在本文中,我们将为您展示如何用 Preferences API 存储对象,并提供了一个为您处理细节的工作库。如果您的数据可以容易地表示为简单对象而不是像字符串和数字这种分离的值时,它会很有用。 我们首先对该 API 作一简短讨论,包括一些使用它的简单例子,然后详细讨论如何使用这个 API 存储对象,并给出为我们完成这项工作的代码。我们还展示了一些使用这个 API 的例子。 为什么设计 Preferences API? 不过,Preferences API 就像所有 Java 语言一样,是以跨平台为目的的,所以它在非 Windows 系统上至少可以工作得一样好(当然,本文中的代码是跨平台的)。 Preferences API 规范没有规定如何实现这个 API,只规定了它必须做什么。Java 运行时环境(Java Runtime Environment JRE)的每一个实现对这个 API 都可以有不同的实现。许多非注册表的实现将 API 数据存储在一个 XML 格式的文件中,这个文件也许是在用户的主目录中或者在一个共享目录中。 与 Windows 注册表一样,Preferences API 使用层次树结构来存储数据。起始点是一个 root node (根节点是树的根基,所有其他节点都是这个节点的后代)。节点可以包含命名的值以及其他节点。不同的程序将它们的数据存储在树的不同位置上,所以它们不会彼此冲突。正如我们将要看到的,Preferences API 采用了特殊的方法帮助防止这种冲突。 我们将首先简单看一下 Preferences API 是如何工作的以及如何使用它。 使用 Preferences
这一行代码返回数据树的 user root。前面我们说系统中的所有数据都存储在一个树中。不过,这并不完全正确 -- 事实上,有两个数据树 -- 用户树和系统树。这两个树的行为完全相同,但是它们有不同的目的。系统树用于存储所用户都可以使用的数据,而用户树对于每一个用户是不同的。 这两个树天生就有不同的目的。您要将字体首选项存储在用户树中,因为这是用户特定的内容。另一方面,您要将程序位置存储在系统树中,因为位置对于所有用户是相同的,并且所有用户都可能用到它。 小型程序会使用系统树或者用户树,但是不会同时使用这两者。大型应用程序可能同时使用这两种树。在本文中,我们将只针对用户树,要记住用户和系统树的行为是一样的。 现在让我们看一下如何用 Preferences API 读取和写入简单的值。 获得一个值
下面是在这之后将它读出来的方法:
注意 当然,您可以读取和写入整数之外的值。可以读取和写入许多基本 Java 类型。还可以将节点存储在其他节点中,如这个例子所示:
这就是 Preferences API 的全部内容 -- 剩下的就是细节使用了,我们将在下一节讨论其中一个细节。 获得一个包的节点 解决方法是将内容存储在包特定的位置上,像这样:
对于 Preferences API 的工作方式有了很好的了解后,我们还需要知道如何扩展它以便对对象进行处理。 存储对象
不过,不幸的是,Preferences 对象没有
我们已经尽量做到在 下一节,我们将看一看 将对象转换为字节数组 幸运的是,我们不需要从头开始 -- 它已经建立在 Java 语言中了。有几种方式将对象转换为字节数组,下面展示了我们在
这里的关键是 还有一种使用其他方式的方法: 清单 4. 将字节数组转换为对象
一定要记 正如我在前面提到的,Preferences API 的确可以对字节数组进行处理。不过,我们在这里构造的字节数组并不是很正确,我们将在下一节看到这一点。 将对象拆分为片段 另一方面,一个对象可以为任意大小,所以我们需要将它分为几部分。当然,最容易的方法是首先将它转换为一个字节数组,然后将字节数组拆开。下面是拆开字节数组的代码,它也来自于
这里没有什么复杂的内容 -- 我们只是创建一个数组的数组,每一个长度为最大 pieceLength的字节长度(pieceLength 是 MAX_VALUE_LENGTH 的3/4)。相应地,有另一种方法将各个部分再合并到一起: 清单 6. 将片段重新组装为完整的字节数组
这个例程检查所有片段的总长度并创建一个具有这种长度的新数组。然后将片段一个一个地拷贝进去。 读取和写入片段 但是我们不能在这里真的这样做。即使一个对象只有一个值,我们也要将它转换为一组固定长度的字节数组。如果我们只有一个字节数组,写入数据树中的 slot 会很容易,因为 Preferences API 直接支持字节数组。但是这行不通,因为我们有多个数组。 技巧是为每一个对象分配一个节点。让我们弄清楚它的意义。 通常,将值存储在节点的多个 slot 的其中之一。但是我们准备为每一个对象创建一个节点, 并将字节数组存储到该节点的 slot 中。让我们说的更具体一些。如果可以,我们会将一个对象存储到单个 slot 中: 清单 7. 将一个对象存储到单个 slot 中
但是我们不能这么做,因为 Preferences 没有
这样,不是将一个值存储到一个称为“child”的 slot 中,我们将几个值存储到一个称为 “child”的节点中。这些值是用数字键 -- “0”、“1”、“2”等存储的。 使用数字键可以使后面读取片段时更容易: 清单 9. 读取容易读的片段
在下一节,我们将看一下结合所有这些步骤的例程。 将所有内容合到一起
方法 有一个用于读取的类似方法: 清单 11. 方法 getObject() 对写入片段做同样的事情
这个方法从 Preferences API 中读取片段,并将它们结合为单个字节数组,然后将它转换为对象。 存储信息 |
发表评论
-
QQ Music居然也看上了8080端口
2008-02-20 13:43 2820起tomcat发现总是8080端口被占用,用360安全卫士查了 ... -
struts2中自定义的ui标签去掉默认的<tr>
2007-10-08 21:27 2464在使用struts2的时候发现如果按照默认的方式使用ui标签, ... -
找到一个免费的svn空间
2007-08-27 17:21 3416http://svn.coollittlethings.com ... -
MessageFormat使用中应注意的问题
2007-08-17 11:07 2365String s = MessageFormat.format ... -
关闭tomcat默认打开的目录显示权限
2006-11-25 13:30 2008关于tomcat的安全性以前一直没有多注意,因为原来都是做企业 ... -
[转帖]HtmlParser初步研究
2006-12-20 22:31 2096HtmlParser初步研究 by lostfire ... -
使用Url Rewrite Filter实现页面伪静态化
2007-05-14 16:07 7272Url Rewrite Filter 是一个基于java的 u ...
相关推荐
在Android开发中,数据存储是不可或缺的一部分,而Preferences则是Android提供的一种轻量级的数据存储机制,主要用于存储用户的一些偏好设置或者简单数据。Preferences通常用于保存应用程序中的键值对,类似于桌面...
在Windows系统中,`Preferences` API使用注册表来保存信息,而在Unix/Linux系统中,信息通常存储在用户的家目录下的一个隐藏文件中。这样保证了用户特定的设置不会影响其他用户,同时也使得应用程序能在用户的不同...
文章中提到的"用 Preferences API 存储对象.mht"文件可能是一个包含完整教程或者示例代码的MHT(单一文件网页)文档,里面可能详述了如何将对象序列化后存入Preferences以及如何读取这些对象。 总之,Preferences ...
Android 使用Shared Preferences进行数据存储-样例,演示如何使用 Shared Preferences 获得数据和保存数据、如何使用getPreferences方法创建文件的模式,以及如何使用getPreferences模拟用户参数设置、查看 ...
在Android开发中,`Preferences` 是一个非常重要的组件,它用于存储和检索用户设置或应用配置数据。`Preferences` 提供了一种简单的方式来管理轻量级的键值对数据,通常用于保存用户的偏好设置,例如IP地址、端口号...
preferences
在深入探讨Android偏好设置(Preferences)之前,我们先简要回顾一下Android数据存储的基本概念及其提供的多种存储选项。根据具体的应用需求,开发者可以选择适合的存储方式来保存持久化数据,这些选项包括...
- 为避免内存泄漏,记得在不需要使用 Shared Preferences 的时候,解除对 `SharedPreferences` 和 `SharedPreferences.Editor` 对象的引用。 - 如果多个线程同时修改 Shared Preferences,可能需要使用 `apply()` ...
3. **类型转换**:Preferences API只能存储String类型的数据,但可以通过序列化和反序列化存储其他类型。例如,可以将整型数据转换为String后再存储,读取时再还原。 4. **备份与恢复**:可以通过`exportNode()`和`...
Allegro是一款广泛应用于PCB设计领域的专业软件,其User Preferences设置是用户个性化定制工作...在“allegro_user preferences详解1-2”的文档中,将详细阐述每个设置项的作用和使用方法,帮助你全面掌握这一功能。
### 关于Android的数据存储:SQLite、ContentProvider与Preferences #### 1. SQLite 数据库 **SQLite** 是一种轻量级的数据库,适用于移动设备。它被集成到Android中,允许应用存储结构化数据。SQLite使用SQL语法...
- **易于使用**:开发者可以通过简单的API调用来实现数据的存储和读取。 - **透明性**:开发者无需关注数据的存储细节,系统自动管理数据的读写。 - **安全性**:存储的数据默认情况下只能被同一应用访问,增加了...
然而,原生的SharedPreferences并不支持直接存储复杂的对象,如自定义类实例或集合。在实际开发中,我们有时需要将复杂对象保存到SharedPreferences中,这就需要一些技巧来实现。 首先,要理解SharedPreferences的...
这里我们将深入探讨如何使用SharedPreferences进行简单的数据存储,通过“Android Preferences保存数据的简单实例”来学习这一关键知识点。 SharedPreferences是Android提供的一种轻量级的数据存储机制,主要用于...
Shared Preferences主要使用getPreferences()方法来获得一个SharedPreferences对象,然后使用该对象的edit()方法来获取一个SharedPreferences.Editor对象,通过该对象可以添加、删除和修改键值对。
然而,直接使用SharedPreferences存储自定义对象或复杂数据结构是不支持的,因为SharedPreferences只支持基本数据类型的序列化和反序列化。但是,在某些场景下,我们可能需要将自定义对象存入SharedPreferences,...
在多种数据存储方式中,`SharedPreferences` 是一种轻量级且易于使用的机制,主要用于存储一些简单的键值对数据,如用户设置、偏好设置等。在本文中,我们将深入探讨`SharedPreferences`的工作原理、使用方法以及...
android-secure-preferences About This project uses the Encryption class from: http://www.java2s.com/Code/Android/Security/AESEncryption.htm Gives an implementation of SharedPreferences, which encrypts...
一、使用Preferences API读写注册表 Preferences API是Java SE的一部分,它提供了一种简单的方式来读写配置数据。 Preferences API基于键值对(key-value pairs)的概念,每个键值对属于一个节点(node),每个节点...
Multiplatform Preferences Use a single object : Preferences in your kotlin shared projects Compatible with kotlin android and kotlin native for iphone class MyPresenter { val preferences = ...