持久化技術簡介
資料持久化就是指將那些記憶體中的瞬時資料保存到存盤設備中,保證即使在手機或計算機關機的情況下,這些資料也不會丟失,保存在記憶體中的資料是處于瞬時狀態的,而保存在存盤設備的資料是處于持久狀態的,持久化技術提供了一種機制,可以讓資料在瞬時狀態和持久狀態之間進行切換
檔案存盤
1. 將資料存盤到檔案中
檔案存盤是 Android 中最基本的資料存盤方式,它不對存盤的內容進行格式化處理,所有資料都是原封不動的保存到檔案當中,適合存盤一些簡單的文本資料或二進制資料
Context 類提供了一個 openFileOutput() 方法,可以將資料存盤到指定的檔案中
fun save(inputText: String) {
try {
val output = openFileOutput("data", Context.MODE_PRIVATE)
val writer = BufferedWriter(OutputStreamWriter(output))
writer.use {
it.write(inputText)
}
} catch (e: IOException) {
e.printStackTrace()
}
}
openFileOutput() 方法接收兩個引數:
- 第一個引數是檔案名,在檔案創建的時候使用,指定的檔案名可以不包含路徑,因為所有的檔案都默認存盤到 /data/data/<package name>/files/ 目錄下
- 第二個引數是檔案的操作模式,主要有
MODE_PRIVATE和MODE_APPEND兩種模式可選,默認是MODE_PRIVATE,表示當指定相同檔案名時,所寫入的內容將會覆寫原檔案的內容,而MODE_APPEND則表示如果檔案存在,就往檔案追加內容
2. 從檔案中讀取資料
類似于將資料存盤到檔案中,Context 類提供了一個 openFileInput() 方法,用于從檔案中讀取資料
fun load(): String {
val content = StringBuilder()
try {
val input = openFileInput("data")
val reader = BufferedReader(InputStreamReader(input))
reader.use {
reader.forEachLine {
content.append(it)
}
}
} catch (e: IOException) {
e.printStackTrace()
}
return content.toString()
}
openFileInput() 方法只接收一個引數,即要讀取的檔案名,然后系統自動到 /data/data/<package name>/files 目錄下加載這個檔案
SharedPreferences 存盤
不同于檔案存盤,SharedPreferences 是使用鍵值對的方式來存盤資料的,也就是說,當保存一條資料時,需要給這條資料提供一個對應的鍵,SharedPreferences 支持多種不同的資料型別存盤,
1. 將資料存盤到 SharedPreferences 中
要想使用 SharedPreferences,首先要獲得 SharedPreferences 物件,Android 中主要提供以下兩種方法用于得到 SharedPreferences 物件:
Context類中的getSharedPreferences()方法,此方法接收兩個引數:第一個引數指定 SharedPreferences 檔案的名稱,存放在 /data/data/<package name>/shared_prefs/ 目錄下;第二個引數指定操作模式,目前只有MODE_PRIVATE可選,表示只有當前應用程式才可以對這個 SharedPreferences 檔案進行讀寫Activity類中的getPreferences()方法,它只接受一個操作模式引數,因為使用這個方法會自動將當前 Activity 的類名作為 SharedPreferences 的檔案名
得到 SharedPreferences 物件之后,就可以開始向 SharedPreferences 存盤資料了
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val editor = getSharedPreferences("data", Context.MODE_PRIVATE).edit()
editor.putString("name", "Tom")
editor.putInt("age", 28)
editor.putBoolean("married", false)
editor.apply()
}
}
2. 從 SharedPreferences 中讀取資料
SharedPreferences 物件提供了一系列 get 方法,用于讀取存盤的對應型別的資料,這些 get 方法都接收兩個引數:第一個引數是鍵,第二個引數是默認值,表示傳入的鍵找不到對應的值時以什么樣的默認值來回傳
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val prefs = getSharedPreferences("data", Context.MODE_PRIVATE)
val name = prefs.getString("name", "")
val age = prefs.getInt("age", 0)
val married = prefs.getBoolean("married", false)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/335184.html
標籤:其他
上一篇:【Android 逆向】修改 Android 系統檔案 ( default.prop 配置資訊 | 修改 default.prop 配置資訊檔案 )
下一篇:HarmonyOS:Text + ListDialog實作類似安卓ExpandableListView的效果(簡易版)
