1. 程式人生 > >資料儲存全方案--詳解持久化技術

資料儲存全方案--詳解持久化技術

持久化技術提供了一種機制可以讓資料在瞬時狀態和持久化狀態之間進行轉換。

Android中的資料持久化技術主要有:
1. 檔案儲存
2. SharedPreference 儲存
3. 資料庫儲存

1 檔案儲存

不會對儲存內容進行任何格式化處理,所有資料都原封不動地儲存在檔案中。

適合場景:
1. 儲存一些簡單的文字資料和二進位制資料

1.1 將資料儲存到檔案中

Context類中提供了openFileOutput()方法,可以用於將資料儲存到指定的檔案中,返回一個FileOutputStream物件,得到這個物件後就可以用Java流的方式將資料寫入檔案中。

public
void save(String inputText){ FileOutputStream out = null; BufferedWriter writer = null; try { /** * Java流操作: * 通過openFileOutput()方法得到一個FileOutputStream物件, * 然後藉助與它構建一個OutputStreamWriter物件, * 然後使用它構建BufferedWriter物件,這樣就可以藉助BufferWriter物件將文字內容寫入文字 */
/** * 第一個引數是檔名,第二個引數是檔案操作模式, * 注意:這裡指定的檔名不包含路徑,所有檔案都預設儲存到/data/data/<package name>/files/目錄下 * 支援兩種操作模式:1.MODE_PRIVATE是預設操作模式,表示同一個檔案儲存時會覆蓋原來的內容, * 2.MODE_APPEND,表示同一個檔案儲存時會在問價末尾追加內容 */ out = openFileOutput("data", Context.MODE_PRIVATE); writer = new
BufferedWriter(new OutputStreamWriter(out)); writer.write(inputText); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { if(writer!=null){ writer.close(); } } catch (IOException e) { e.printStackTrace(); } } }

1.2 從檔案中讀取資料

Context類中還提供了openFileInput()方法,用於從檔案中讀取資料。

public String load(){
    FileInputStream in = null;
    BufferedReader reader = null;
    StringBuilder content = new StringBuilder();
    try {
        /**
         * 先通過openFileInput()方法獲取一個FileInputStream物件,
         * 然後藉助它構建一個InputStreamReader物件,
         * 然後藉助它構建一個BufferReader物件,
         * 這樣我們就可以通過BufferReader物件進行一行一行的讀取,並儲存在StringBuilder物件中
         */

        /**
         * 只接收一個引數,即要讀取的檔名,
         * 系統會自動到/data/data/<package name>/files/目錄下去載入這個檔案,
         * 返回一個FileInputStream物件,
         * 之後就可以通過Java流的方式將資料讀取出來
         */
        in = openFileInput("data");
        reader = new BufferedReader(new InputStreamReader(in));
        String line = "";
        while((line = reader.readLine())!=null){
            content.append(line);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if(reader!=null){
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return content.toString();
}

2 SharedPreferences 儲存

SharedPreferences 使用鍵值對類儲存資料,SharedPreferences 支援多種型別資料儲存,因此使用 SharedPreferences 類進行資料持久化要比使用檔案方便很多。

2.1 將資料儲存到 SharedPreferences 中

首先要獲得 SharedPreferences 物件,有3種方法:
1) Context 類中的 getSharedPreferences() 方法

/**
 * context:Context型別
 * 接收兩個引數,
 * 引數一:SharedPreferences 檔名稱,
 * SharedPreferences 檔案都存放在 /data/data/<package name>/shared_prefs/ 目錄下,
 * 引數二:指定操作模式,
 * 有唯一一個操作模式:MODE_PRIVATE,與傳入0效果相同,表示只有當前的應用程式才可以對這個 SharedPreferences 檔案進行操作
 */
SharedPreferences sp = context.getSharedPreferences(Constants.PREFERENCE_NAME, Context.MODE_PRIVATE);

2) Activity 類中的 getPreferences() 方法

/**
 * 用法與Context 中的getSharedPreferences() 方法類似,
 * 只有一個引數:MODE_PRIVATE,
 * 會自動將當前活動的類名作為SharedPerferences 的檔名
 */
SharedPreferences sp = this.getPreferences(MODE_PRIVATE);

3) PreferencesManager 類中的 getDefaultSharedPreferences() 方法

/**
 * 靜態方法,
 * 只有一個引數:Context,
 * 自動使用當前應用程式的包名作為字首來命名 SharedPreferences 檔案
 */
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);

得到了 SharedPreferences 物件之後,就可以開始向 SharedPreferences 檔案中儲存資料了

/**
 * 呼叫 SharedPreferences 物件的 edit() 方法來獲取一個 SharedPreferences.Editor 物件
  */
SharedPreferences.Editor editor = sp.edit();
/**
 * 向 SharedPreferences.Editor 物件中新增資料,
 * 可以是多種資料型別
 */
editor.putBoolean("name",true);
editor.putFloat("name",1.0f);
editor.putInt("name",1);
editor.putLong("name",1);
editor.putString("name","value");
HashSet<String> value = new HashSet<>();
value.add("value");
editor.putStringSet("name",value);
/**
 * 呼叫 apply() 方法將新增的資料提交
 */
editor.apply();

2.2 從 SharedPreferences 中讀取資料

/**
 * SharedPreferences 物件中提供了一系列 get 方法,用於對儲存的資料進行讀取,
 * 每種 get 方法都對應了 SharedPreferences.Editor 中的一種 put 方法,
 * 這些 get 方法都有兩個引數,
 * 引數一:鍵
 * 引數二:預設值,
 * 當傳入的鍵找不到對應的值時,使用預設值
 */
boolean rl = sp.getBoolean("name",false);
float r2 = sp.getFloat("name",0.0f);
int r3 = sp.getInt("name",0);
long r4 = sp.getLong("name",0);
String r5 = sp.getString("name","");
HashSet<String> value1 = new HashSet<>();
HashSet<String> r6 = (HashSet<String>) sp.getStringSet("name",value1);

2.3 SharedPreferences 工具類

3 SQLite 資料庫儲存

相關推薦

第一行程式碼——第六章:資料儲存方案——持久化技術

目錄: 6.1 持久化技術簡介 6.2 檔案儲存 6.2.1 將資料儲存到檔案中 6.2.2 從檔案中讀出資料 6.3 SharedPreferences 儲存 6.3.1 將資料儲存到SharedPreferences中 6.3.2 從SharedPreferenc

第二行程式碼學習筆記——第六章:資料儲存方案——持久化技術

本章要點 任何一個應用程式,總是不停的和資料打交道。 瞬時資料:指儲存在記憶體當中,有可能因為程式關閉或其他原因導致記憶體被回收而丟失的資料。 資料持久化技術,為了解決關鍵性資料的丟失。 6.1 持久化技術簡介 資料持久化技術:指那些記憶體中的瞬時

資料儲存方案--持久化技術

持久化技術提供了一種機制可以讓資料在瞬時狀態和持久化狀態之間進行轉換。 Android中的資料持久化技術主要有: 1. 檔案儲存 2. SharedPreference 儲存 3. 資料庫儲存 1 檔案儲存 不會對儲存內容進行任何格式化處理

android 摘要----資料儲存方案持久化技術

資料持久化:         只將那些記憶體中的瞬時資料儲存到儲存裝置中,保證即使在手機或電腦關機的情況下,這些資料也不會丟失。 1,檔案儲存:             是android中最基本的一種資料儲存方式,不對儲存內容進行任何格式化處理,所有詩句原封不動的儲存到檔案

資料儲存--------持久化技術

檔案儲存        方法儲存是Android最基本的一種資料儲存方式下面就給大家承上程式碼: package com.example.liangshaoteng.fileoutputstream; import android.content.Context; im

IOS 資料儲存之 FMDB

// ViewController.m // JRFMDB // // Created by jerehedu on 15/6/18. // Copyright (c) 2015年 jerehedu. All rights reserved. // #import "ViewCon

IOS 資料儲存之 SQLite

// ViewController.m // JRSQLite查詢3 // // Created by jerehedu on 15/6/16. // Copyright (c) 2015年 jerehedu. All rights reserved. // #import "Vi

高併發架構系列:Redis快取和MySQL資料一致性方案

一、需求起因 在高併發的業務場景下,資料庫大多數情況都是使用者併發訪問最薄弱的環節。所以,就需要使用redis做一個緩衝操作,讓請求先訪問到redis,而不是直接訪問MySQL等資料庫。 這個業務場景,主要是解決讀資料從Redis快取,一般都是按照下圖的流程來進行業務操作。 讀取快取步驟

Redis持久化方案

Redis的資料回寫機制 Redis的資料回寫機制分同步和非同步兩種, 同步回寫即SAVE命令,主程序直接向磁盤迴寫資料。在資料大的情況下會導致系統假死很長時間,所以一般不是推薦的。 非同步回寫即BGSAVE命令,主程序fork後,複製自身並通過這個新的程序回寫磁碟,回寫

APP版微信機器人技術方案

GitHub上有很多關於微信機器人的實現版本,這裡講一下如何在安卓手機上實現一個微信聊天機器人。思路大致都是一樣的,突破口都是呼叫微信的網頁版的介面,進行網頁登入,進而獲取到微信裡的聊天內容,然後呼叫聊天傳送介面將內容傳送給微信。 一、網頁版的介面大致分為五類

mysql儲存引擎InnoDB,從底層看清InnoDB資料結構

InnoDB一個支援事務安全的儲存引擎,同時也是mysql的預設儲存引擎。本文主要從資料結構的角度,詳細介紹InnoDB行記錄格式和資料頁的實現原理,從底層看清InnoDB儲存引擎。 > 本文主要內容是根據掘金小冊《從根兒上理解 MySQL》整理而來。如想詳細瞭解,建議購買掘金小冊閱讀。 ## I

接口自動化測試方案

system earch ply 找我 發現 safari todo 文件中 timestamp 前言 去年,我們進行了項目的拆分,拆分後的各個子系統也都逐步的改成了通過接口進行數據的交換,接口測試也被提上日程。經過一段時間的探索,接口自動化測試方案越來越完善,今天給大

EJB2.0教程 EJB技術及實現原理

tee nsa 普通 事情 println 配置 ransac 教程 聲明 EJB是什麽呢?EJB是一個J2EE體系中的組件.再簡單的說它是一個能夠遠程調用的javaBean.它同普通的javaBean有兩點不同.第一點,就是遠程調用.第二點,就是事務的功能,我們在EJB中

傳美雲商系統軟件方案

ext mage 系統 做到 function ice 一個 集成 現在 傳美雲商系統是通過頤和果園讓公眾所知道的,頤和果園是做水果生鮮食品市場的,運用傳美雲商這個軟件為什麽能打通互聯網市場?究其主要原因是因新零售正在發生日新月異的變化! 任何新零售都需要數據的支撐。辦公室

企業級代碼上線方案

代碼上線 代碼備份 軟鏈接 中小型企業代碼上線準則 (1)上線說明****對於重要的升級上線來說先有運維人員備份所有重要數據,然後經過開發人員測試和內部測試成功後直接上傳的站點目錄,出現問題後采用歷史代碼回滾策略。而對普通升級來說,先備份必要數據,然後代碼在開發人員和內外網測試成功後可直接上線。(

前端模塊化開發解決方案

暴露 可見 返回 異步加載 def 今天 htm 硬盤 業務邏輯 一、模塊化開發方案 前端發展到今天,已經有不少模塊化的方案,比如 CommonJS(常用在服務器端,同步的,如nodejs) AMD(常用在瀏覽器端,異步的,如requirejs)(Asynchronous

爆款AR遊戲如何打造?網易楊鵬以《悠夢》為例前沿技術

系統 安全 有著 互聯 其中 應用 中小型 信息 詳解 7月31日,2018雲創大會遊戲論壇在杭州國際博覽中心103B圓滿舉行。本場遊戲論壇聚焦探討了可能對遊戲行業發展有重大推動的新技術、新實踐,如AR、區塊鏈、安全、大數據等。網易AR遊戲生態合作負責人楊鵬表示,傳統遊戲模

電商購物直播app開發解決方案

分享 進入 發的 購物平臺 發出 阿裏巴巴 通過 出了 內嵌 最近有很多小夥伴咨詢電商直播app開發,在傳統的秀場直播競爭力逐漸下降的今天,“直播+”爆發出了無窮的“小宇宙”。在眾多“直播+”解決方案中,“直播+電商”是目前比較完善的解決方案,像阿裏巴巴旗下的淘寶直播,以及

centos磁碟安裝與磁碟分割槽方案

安裝前須知: 前幾天自己研究了下幾個linux系統,還是覺著centos要好一些。相對穩定點,起碼桌面系統還是比 ubuntu 強 安裝centos並不難,安裝方法多得是,像硬碟安裝,U盤安裝,最簡單方便得當然是光碟安裝,而且燒錄一張管盤僅僅需要10分鐘,比硬碟安裝和U盤安裝需要仔細研究大量得說明

前端 H5 橫屏 獨特處理方案

前言 隨著公司知識付費業務的發展,產品發現橫屏展示內容的效果和體驗都要比豎屏要來的好。我也感覺確實是這樣的~。剛接到這個需求的時候,稍微想了一下,橫屏這還不簡單直接把整個頁面旋轉90度,不就完事了?結果真正開發的過程中發現並沒有這麼簡單。比如螢幕橫過來手勢滑動的方向沒有變過來等等!於是嘗試去百度了一下最終並