数据存储方案-持久化存储

概述:

任何一个应用程序,其实说白了就是在不停地和数据打交道,例如QQ,新闻,刷微博等等,所关心的都是里面的数据,没有数据的应用程序就变成了一个空壳子,对用户来说没有实际的用途。那么这些数据都是从哪里来的呢?现在多数的数据基本都是由用户产生的,比如发微博,评论新闻,其实都是在产生数据。而这些数据又分为两种,第一种是瞬时数据,瞬时数据是指存储在内存当中,有可能因为程序关闭或者其他原因导致内存被回收而丢失的数据。这对于一些关键数据是不能忍受的,如谁都不希望自己刚刚发出去一条微博,刷新一下就没有了。那么怎么保证一些关键的数据不会丢失呢?这就需要数据的持久化计数了。

数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或者电脑关机的情况下,这些数据仍然不会丢失。保存在内存中的数据时处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了了一种机制可以让数据在瞬时状态和持久状态之间进行切换。

持久化技术被广泛应用于各种程序设计领域当中,本文要讲述的是Android系统中的数据持久化技术。Android系统中主要提供了三种方式用于简单的实现数据持久化功能。即 文件存储、SharedPerence存储以及数据库存储。当然,除了上述三种方式外,还可以将数据存储在手机的SD卡中,不过使用文件、SharedPerence、数据库三种方式来保存数据会相对更简单一些,而且相比将数据保存在SD卡中会更加安全。

一 文件存储

文件存储是Android系统中最基本的一种数据存储方式,它不对存储的内容进行任何格式化处理,所有数据都是原封不动的保存到文件当中,因而它比较合适与存储一些简单的文本数据或者二进制数据。如果我们想使用文件存储的方式来保存一些较为复杂的数据,就需要定义一套自己的格式规范,这样可以方便以后将数据从文件中重新解析出来。

1.1 将数据存储到文件中

Context类中提供了一个 openFileOutput()方法,可以用于将数据储存到指定的文件中。该方法有两个参数,第一个参数是文件名,在文件创建的时候使用的就是这个名称,注意这里指定的文件名不可以包含路径,因为所有的文件都是默认存储到 /data/data//files/目录下的。第二个参数是文件的操作模式,主要有两种工作模式可选,MODE_PRIVATE和MODE_APPEND。其中MODE_PRIVATE是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖源文件中的内容,而MODE_APPEND则表示如果该文件已经存在,就往文件里面追加信息内容,不存在就创建新文件。其实文件的操作模式还有另外两种:MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,这两种模式表示允许其他的应用程序对我们的程序中的文件进行读写操作,不过由于这两种模式过于危险,很容易引起应用的安全漏洞,已经在Android4.2版本中被废弃。

openFileOutput()方法返回的是一个 FileOutputStream对象,得到这个对象之后就可以使用Java流的方式将数据写到文件当中了。下面是是将一段文本内容存储到文件中代码范例:

package com.android.mhrtest0;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
import java.io.FileOutputStream;
import java.io.BufferedWriter;
import android.content.Context;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class MainActivity extends Activity {
	private final static String LOG_TAG = "test0.MainActivity";
 
	FileOutputStream out = null;
	private String message = "pppppppppppppppppppppp";
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		try {
			out = openFileOutput("data.txt",Context.MODE_PRIVATE + Context.MODE_APPEND +  Context.MODE_WORLD_READABLE);
			byte[] data = message.getBytes();
			out.write(data);
			out.flush();
			
		} catch (IOException e) {
			e.printStackTrace();
			} finally {
				try {
					if (out != null){
						out.close();
					}
				}catch (IOException e){
					e.printStackTrace();
				}
		}
		Log.i(LOG_TAG, "MainActivity Created.");
	}

二 SharedPreferences 存储

不同于文件存储方式,SharedPreferences是使用键值对的方式来存储数据的。也就是说,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的数值取出来。而且 SharedPreferences还支持多种不同类型的数据类型存储,如果存储的数据类型是整型,那么读取出来的数据类型也是整型的,如果存储
的数据类型是一个字符串,那么读取出来的数据仍然是字符串。

2.1 将数据存储到 SharedPreferences 中

要想使用SharedPreferences来存储数据,首先需要获取到 SharedPreferences对象,Android中主要提供了三种方法
用于得到 SharedPreferences 对象。

方法1 Context类中的 getSharedPreferences() 方法

此方法接收两个参数,第一个参数用于指定 SharedPreferences 文件名称,如果指定的文件不存在,则会创建一个,
SharedPreferences 文件都是存放在 /data/data//shared_prefs/目录下的。第二个参数用于指定
操作模式,目前只有 MODE_PRIVATE这一种模式可选,它是默认的操作模式,和直接传入0效果是相同的,表示只有当前
的应用程序才可以对这个 SharedPreferences 文件进行读写。其他几种操作模式均已被废弃。

方法2 Activity类中的 getPreferences()方法
这个方法和 Context中的 getSharedPreferences()方法很相似,不过它只接收一个操作模式参数,因为使用这个方法时
会自动将当前活动的类名作为 SharedPreferences 的文件名。

方法3 PreferenceManager类中的 getDefaultSharedPreferences()方法1
这是一个静态方法,它接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名 SharedPreferences文件。得到了
SharedPreferences对象之后,就可以开始向 SharedPreferences文件中存储数据了,

方法1实例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux老A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值