Android數(shù)據(jù)存儲(chǔ)

1.Android中提供哪些數(shù)據(jù)持久存儲(chǔ)的方法?

1.File文件存儲(chǔ) ?? 2.sharedPreferences? 3. SQLite數(shù)據(jù)庫(kù)存儲(chǔ)

2.Java中的I/O流讀寫怎么做?

當(dāng)使用集合持有數(shù)據(jù)時(shí),這些數(shù)據(jù)都存在于內(nèi)存中,一旦程序運(yùn)行結(jié)束,這些數(shù)據(jù)將會(huì)從內(nèi)存中清除,下次再想使用這些數(shù)據(jù),已經(jīng)沒(méi)有了。 如果希望將運(yùn)算永久地保存下來(lái),可以使用IO,將這些數(shù)據(jù)持久化存儲(chǔ)起來(lái)。

一 JAVA語(yǔ)言中主要通過(guò)流來(lái)完成IO操作。

輸入流:從程序外部傳向程序的流。輸入流只能從中讀數(shù)據(jù)。

輸出流: 從程序傳到外部的流。輸出流只能向其寫入數(shù)據(jù)。

二 字節(jié)流

字節(jié)流是以字節(jié)為傳輸單位的數(shù)據(jù)讀寫形式,用于直接讀取二進(jìn)制數(shù)據(jù),如圖像和聲音文件等。

InputStream和OutputStream分別為面向字節(jié)的輸入流類的父類和輸出流類的父類。InputStream和OutputStream都是抽象類。FileInputStream和FileOutputStream是文件流類,他們是InputStream和OutputStream的子類。FileInputStream類的一般用法是:先創(chuàng)建一個(gè)FileInputStream對(duì)象關(guān)聯(lián)到要讀取的文件,然后調(diào)用read方法讀取字節(jié)數(shù)據(jù)到程序中,再進(jìn)行其他處理。因?yàn)閞ead方法是按字節(jié)的讀入的,所以漢字被讀入時(shí)會(huì)出現(xiàn)亂碼。FileOutputStream類的一般用法是:先創(chuàng)建一個(gè)FileOutputStream對(duì)象關(guān)聯(lián)到要寫入的文件,然后調(diào)用write方法將字節(jié)數(shù)據(jù)寫到程序中。如果進(jìn)行寫操作的文件不存在,則自動(dòng)創(chuàng)建該文件,但是如果文件所在的路徑也不存在,則運(yùn)行時(shí)會(huì)報(bào)錯(cuò)。例如 ? ? ? ?

? ? ? FileOutputStream fos = new FileOutputStream("D:\\test.txt");是不會(huì)報(bào)錯(cuò)的,

? ? ? FileOutputStream fos = new FileOutputStream("D:\\tmp\\test.txt");如果之前在D盤中沒(méi)有tmp這個(gè)文件夾,那么此時(shí)運(yùn)行這條語(yǔ)句會(huì)報(bào)錯(cuò)。

三?字符流

Reader 和 Writer類是所有字符流的父類。一次讀取或是寫入兩個(gè)字節(jié),16位,即一個(gè)Unicode字符,因此可以使用字符流直接讀寫漢字內(nèi)容。

BufferedReader 和 BufferedWriter類的用法示例

package 文件操作_字符流_BufferedReader和BufferedWriter;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class BufferedDemo {

? ? public static void main(String[] args) {

? ? ? ? try {

? ? ? ? ? ? FileReader fr = new FileReader("D:\\test.txt");

? ? ? ? ? ? BufferedReader br = new BufferedReader(fr);

? ? ? ? ? ? FileWriter fw = new FileWriter("D:\\test1.txt");

? ? ? ? ? ? BufferedWriter bw = new BufferedWriter(fw);

? ? ? ? ? ? String str = br.readLine();

? ? ? ? ? ? while (str != null) {

? ? ? ? ? ? ? ? bw.write(str);

? ? ? ? ? ? ? ? bw.newLine();

? ? ? ? ? ? ? ? str = br.readLine();

? ? ? ? ? ? }

? ? ? ? ? ? br.close();

? ? ? ? ? ? bw.close();

? ? ? ? } catch (FileNotFoundException e) {

? ? ? ? ? ? // TODO Auto-generated catch block

? ? ? ? ? ? e.printStackTrace();

? ? ? ? } catch (IOException e) {

? ? ? ? ? ? e.printStackTrace();

? ? ? ? }

? ? }

}

四 緩存流 BufferedInputStream 和 BufferedOutputStream

使用緩存流可以提高大文件的讀寫效率。例如從文件讀入數(shù)據(jù)時(shí),每次從輸入流中讀取較大的數(shù)據(jù)量存入內(nèi)存緩沖區(qū),具體的讀操作針對(duì)該緩沖區(qū)進(jìn)行;執(zhí)行緩沖輸出時(shí),每次將輸出流中的數(shù)據(jù)寫入到內(nèi)存緩沖區(qū),知道緩沖區(qū)寫滿,才將數(shù)據(jù)寫入到最終的介質(zhì)中。

使用緩存流的缺點(diǎn):當(dāng)計(jì)算機(jī)突然關(guān)閉時(shí),可能會(huì)丟失數(shù)據(jù)。通過(guò)清空緩沖區(qū)的數(shù)據(jù)可以減少這種情況的發(fā)生,使用flush()方法即可。

3.SharePreferences適用情形?使用中需要注意什么?

SharedPreferences是一種輕型的數(shù)據(jù)存儲(chǔ)方式,主要用于存儲(chǔ)簡(jiǎn)單的配置信息,如int、string、boolean、float和long,他的本質(zhì)是基于XML的key-value鍵值對(duì)數(shù)據(jù)

實(shí)現(xiàn)SharedPreferences存儲(chǔ)的步驟如下:

(1)調(diào)用getSharedPreferences()方法獲得SharedPreferences對(duì)象,提供兩個(gè)參數(shù),指定文件名和操作模式。

(2)調(diào)用SharedPreference對(duì)象的edit()方法獲得SharedPreferences.Editor引用對(duì)象

(3)調(diào)用Edit接口的形如put某某某()方法以鍵值對(duì)形式保存某某某類型的數(shù)據(jù)

(4)調(diào)用Edit接口的commit()方法提交鍵值對(duì)。

一定注意,不用SharedPreferences對(duì)象去存儲(chǔ)或修改數(shù)據(jù),而是通過(guò)Editor對(duì)象。但獲取數(shù)據(jù)時(shí)需要調(diào)用SharedPreferences對(duì)象的get某某某()方法了。

4.了解SQLite中的事務(wù)處理嗎?是如何做的?

如果在執(zhí)行SQL操作的時(shí)候,插入兩條信息,這時(shí)就是一組事物,只有兩個(gè)插入都完成,才會(huì)調(diào)用標(biāo)記事務(wù)完成,而如果沒(méi)有完成,在結(jié)束事務(wù)的時(shí)候發(fā)現(xiàn)db.setTransactionSuccessful();沒(méi)有調(diào)用,就會(huì)回滾,將第一次插入操作放棄,還原為之前的情況,只有在事務(wù)順利結(jié)束,才表示操作都執(zhí)行完成了

5.如果現(xiàn)在要?jiǎng)h除SQLite中表的一個(gè)字段如何做?

6.使用SQLite時(shí)會(huì)有哪些優(yōu)化操作?

一? 創(chuàng)建索引

索引有助于加快 SELECT 查詢和 WHERE 子句,但它會(huì)減慢使用 UPDATE 和 INSERT 語(yǔ)句時(shí)的數(shù)據(jù)輸入。索引可以創(chuàng)建或刪除,但不會(huì)影響數(shù)據(jù)。

二? 使用事務(wù)

原子性操作,要么全部成功,要么全部失??;在執(zhí)行大量數(shù)據(jù)的插入操作時(shí),避免頻繁操作cursor,可以大幅減少insert操作時(shí)間,一般為1-2個(gè)量級(jí)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、概述 對(duì)于Android系統(tǒng)中的存儲(chǔ),一般分為以下三個(gè)方面: 內(nèi)部存儲(chǔ) 外部存儲(chǔ) 外部緩存目錄 外部永久目錄 ...
    澤毛閱讀 3,057評(píng)論 0 8
  • 一、使用SharedPreferences存儲(chǔ)數(shù)據(jù) 默認(rèn)存儲(chǔ)路徑:/data/data/ /shared_pref...
    zoky_閱讀 948評(píng)論 0 1
  • 進(jìn)入海拔平均4500米的阿里地區(qū)后,對(duì)于容易高反的人來(lái)說(shuō)簡(jiǎn)直就是眼睛在天堂,身體在地獄!而我們姐妹幾個(gè)表現(xiàn)一直都是...
    卓嘎VIP閱讀 283評(píng)論 0 0
  • 終南山,脈起昆侖,尾銜嵩岳,鐘靈毓秀,宏麗瑰奇。宋人所撰《長(zhǎng)安縣志》載:“終南橫亙關(guān)中南面,西起秦隴,東至藍(lán)田,相...
    筠玥閱讀 811評(píng)論 0 0
  • 都說(shuō)婆婆和兒媳婦是天敵,我總不以為然,總想著如果你待之以誠(chéng),婆婆就是另一個(gè)媽。 我們常年在外,結(jié)婚后也就逢年過(guò)節(jié)時(shí)...
    燭影搖紅_06ba閱讀 408評(píng)論 0 2

友情鏈接更多精彩內(nèi)容