



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)存儲(chǔ)的幾種方式總體的來(lái)講,數(shù)據(jù)存儲(chǔ)方式有三種:一個(gè)是文件,一個(gè)是數(shù)據(jù)庫(kù),另一個(gè)則是網(wǎng)絡(luò)。其 中文件和數(shù)據(jù)庫(kù)可能用的稍多一些,文件用起來(lái)較為方便,程序可以自己定義格式;數(shù)據(jù)庫(kù)用起稍煩鎖一些,但它有它的優(yōu)點(diǎn),比如在海量數(shù)據(jù)時(shí)性能優(yōu)越,有查詢功能,可以加密, 可以加鎖,可以跨應(yīng)用,跨平臺(tái)等等;網(wǎng)絡(luò),則用于比較重要的事情,比如科研,勘探,航 空等實(shí)時(shí)采集到的數(shù)據(jù)需要馬上通過(guò)網(wǎng)絡(luò)傳輸?shù)綌?shù)據(jù)處理中心進(jìn)行存儲(chǔ)并進(jìn)行處理。對(duì)于An droid平臺(tái)來(lái)講,它的存儲(chǔ)方式也不外乎這幾種,按方式總體來(lái)分,也是文件,數(shù)據(jù)庫(kù)和 網(wǎng)絡(luò)。但從開發(fā)者的角度來(lái)講它可以分為以下五種方式:I.SharedPreferences共享
2、偏好2.1 nternal Storage 內(nèi)部存儲(chǔ)空間 3.External Storage 外部存儲(chǔ)空間 4.SQLite Database數(shù)據(jù)庫(kù)5.1 nternet網(wǎng)絡(luò) 這幾種方式各自有各自的優(yōu)點(diǎn)和缺點(diǎn),要根據(jù)不同的實(shí)際情況來(lái)選擇,而無(wú)法給出統(tǒng)一的標(biāo)準(zhǔn)。下面就各種方式談?wù)勊鼈兊膬?yōu)缺點(diǎn),以及最合適的使用情況:1.SharedPreferences共享偏好 SharedPreferences是用來(lái)存儲(chǔ)一些 Key/Value類似的成對(duì)的基本數(shù)據(jù)類型,注意,它只能存儲(chǔ)基本數(shù)據(jù)類型,也即int, long, boolean, String, float。事實(shí)上它完全相當(dāng)于一個(gè) HashMap,
3、唯一不同的就是 HashMap中的 Value可以是任何 對(duì)象,而 SharedPreferences中的值只能存儲(chǔ)基本數(shù)據(jù)類型(primitive types)。對(duì)于它的使用方法, 可以參考An droid Developer Guide,這里不重復(fù)。如此來(lái)看,最適合 SharedPrefere nces的地方就是保存配置信息,因?yàn)?很多配置信息都是 Key/Value。事實(shí)上,在 An droid當(dāng)中 SharedPreferences使用最多的地方也是用來(lái)保存配置(Settings)信息,系統(tǒng)中的 Settings中這樣,各個(gè)應(yīng)用中的 Sett ings也是這樣。并且,An droid中
4、為了方便的使用 SharedPrefere nces 保存配置信息,它來(lái)專門有PreferenceActivity用來(lái)封裝。也就是說(shuō)如果你想在應(yīng)用程序中創(chuàng) 建配置(Settings),你可以直接使用PreferenceActivity和一些相關(guān)的專門為 Preferenee圭寸裝的組件,而不用再直接去創(chuàng)建,讀取和保存SharedPreferenee, Framework中的這些組件會(huì)為你做這些事。再談?wù)勔恍┦褂?SharedPrefere nee時(shí)的技巧,它只能保存基本數(shù)據(jù)類型,但假如我想保存一個(gè)數(shù)組,怎么辦?可以把數(shù)據(jù)進(jìn)行處理,把它轉(zhuǎn)化成一個(gè)String,取出的時(shí)候再還原就好了;再如,如想保
5、存一個(gè)對(duì)象,怎么辦,同樣,可以把對(duì)象序列化成為字符序 列,或轉(zhuǎn)成 String( Object.toString(),或是把它的 HashCode (Object.hashCode()當(dāng)成 Value 保存進(jìn)去??傊?,SharedPreferences使用起來(lái)十分的方便,可以靈活應(yīng)用,因?yàn)樗?jiǎn)單方 便,所以能用它就盡量不要用文件或是數(shù)據(jù)庫(kù)。1.1 nternal Storage內(nèi)部存儲(chǔ)空間 所謂的內(nèi)部存儲(chǔ)與外部存儲(chǔ),是指是否是手機(jī)內(nèi)置。手機(jī)內(nèi)置的存儲(chǔ)空間,稱為內(nèi)部存儲(chǔ),它是手機(jī)一旦出廠就無(wú)法改變,它也是手機(jī)的硬件指標(biāo)之一,通常來(lái)講手機(jī)內(nèi)置存儲(chǔ)空間越大意味著 手機(jī)價(jià)格會(huì)越貴(很多地方把它稱為手機(jī)
6、內(nèi)存,但我們做軟件的知道,這并不準(zhǔn)確,內(nèi)存是 指手機(jī)運(yùn)行時(shí)存儲(chǔ)程序,數(shù)據(jù)和指令的地方;這里應(yīng)該是手機(jī)內(nèi)部存儲(chǔ)的簡(jiǎn)稱為內(nèi)存,而并非嚴(yán)格意義上的內(nèi)存)。內(nèi)部存儲(chǔ)空間十分有限,因而顯得可貴,所以我們要盡可能避免使 用;另外,它也是系統(tǒng)本身和系統(tǒng)應(yīng)用程序主要的數(shù)據(jù)存儲(chǔ)所在地,一旦內(nèi)部存儲(chǔ)空間耗盡,手機(jī)也就無(wú)法使用了。所以對(duì)于內(nèi)部存儲(chǔ)空間,我們要盡量避免使用。上面所談到的SharedPrefere nces和下面要談到的 SQLite數(shù)據(jù)庫(kù)也都是存儲(chǔ)在內(nèi)部存儲(chǔ)空間上的。An droid本身來(lái)講是一個(gè) Linux操作系統(tǒng),所以它的內(nèi)部存儲(chǔ)空間,對(duì)于應(yīng)用程序和用戶來(lái)講就是“/data/data"目
7、錄。它與其他的(外部的存儲(chǔ))相比有著比較穩(wěn)定,存儲(chǔ)方便,操作簡(jiǎn)單, 更加安全(因?yàn)榭梢钥刂圃L問(wèn)權(quán)限)等優(yōu)點(diǎn)。而它唯一的缺點(diǎn)就是它比較有限,比較可貴。 雖然,可以非常容易的知道程序本身的數(shù)據(jù)所在路徑,所有的應(yīng)用程序的數(shù)據(jù)路徑都是“/data/data/app-package-name/',所有的程序用到的數(shù)據(jù),比如libs 庫(kù),SharedPreferences都是存放在這個(gè)路徑下面。但我們?cè)谑褂玫臅r(shí)候最好不要,或是千萬(wàn)不要直接引用這個(gè)路徑。使用內(nèi)部存儲(chǔ)主要有二個(gè)方式,一個(gè)是文件操作,一個(gè)是文件夾操作。無(wú)論哪種方式,Con text中都提供了相應(yīng)的函數(shù)來(lái)支持,使用Con text不但操作
8、簡(jiǎn)單方便,最重要的是Con text會(huì)幫助我們管理這些文件,也可以方便幫助我們控制文件的訪問(wèn)權(quán)限。先來(lái)系統(tǒng)的說(shuō)下Con text中關(guān)于文件和文件夾操作的函數(shù)有哪些。a.創(chuàng)建一個(gè)文件,并打開成一個(gè)文件輸出流,需要提供一個(gè) String ,作為文件名I.FileOutputStream output = Context.openOutputFile(filename ,Context.MODE_PRIV ATE); 2.output.write(data); / use output to write whatever you like 3.output.close(); 1.FileOutput
9、Stream output =Con text.ope nO utputFile(file name,Context.MODE_PRIV ATE); output.write(data); / use output to write whatever you like output.close(); b.同樣,想打開一個(gè)文件作為輸入的話,也是只需要提供文件名 1.File In putStream in put = Con text.ope nln putFile(file name);2.i nput.read(); 3.i nput.close();1.File In putStream
10、in put = Con text.ope nln putFile(file name); in put.read(); in put.close(); c.歹 U出所有的已創(chuàng)建的文件1.String files = Context.fileList(); 2.for (String file : files) 3. Log.e(TAG ,"file is " + file); 4. 1.String files = Context.fileList(); for (String file : files) Log.e(TAG, "fileis " +
11、file); d.刪除文件,能創(chuàng)建就要能夠刪除,當(dāng)然也會(huì)提供了刪除文件的接口,它也非 常簡(jiǎn)單,只需要提供文件名1.if (Co ntext.deleteFile(file name) 2. Log.e(TAG , "delete file " +file name + " sucessfully "); 3. else 4. Log.e(TAG , "failed to delete file " + file name); 5. 1.if (Con text.deleteFile(file name) Log.e(TAG, &quo
12、t;delete file " + file name + " sucessfully "); else Log.e(TAG, "failed to delete file " + file name); e.獲取文件已創(chuàng)建文件的路徑,它返回一個(gè)文件對(duì)象用于操作路徑1.File fileDir = Context.getFileDir(); 2.Log.e(TAG, "fileDir " +fileDir.getAbsolutePath(); 1.File fileDir = Con text.getFileDir();Lo
13、g.e(TAG, "fileDir " +fileDir.getAbsolutePath(); f.創(chuàng)建一個(gè)目錄,需要傳入目錄名稱,它返回一個(gè)文件對(duì)象用到操作路徑 1.File workDir = Context.getDir(dirName, Context.MODE_PRIVATE); 2.Log.e(TAG ,"workdir "+ workDir.getAbsolutePath(); 1.File workDir = Co ntext.getDir(dirName,Context.MODE_PRIV ATE); Log.e(TAG , "
14、;workdir " + workDir.getAbsolutePath(); g. 以 File 對(duì)象 方式查看所創(chuàng)建文件,需要傳入文件名,會(huì)返回文件對(duì)象 1.File store =Context.openFileStreamPath(filename); 2.Log.e(TAG, "store " + store.length(); 1.File store = Context.openFileStreamPath(filename); Log.e(TAG, "store " + store.length(); h.獲取 Cache 路
15、徑,無(wú)需要傳入?yún)?shù),返回文件對(duì)象1.File cachedir = Context.getCacheDir(); 2.Log.e(TAG ,"cachedir " + cacheDir.getAbsolutePath(); 1.File cachedir = Con text.getCacheDir(); Log.e(TAG, "cachedir " + cacheDir.getAbsolutePath();總結(jié)一下文件相關(guān)操作,可以得出以下三個(gè)特點(diǎn):1.文件操作只需要向函數(shù)提供文件名,所以程序自己只需要維護(hù)文件名即可;2.不用自己去創(chuàng)建文件對(duì)象和輸入、
16、輸出流,提供文件名就可以返回File對(duì)象或輸入輸出流3.對(duì)于路徑操作返回的都是文件對(duì)象。如前所述,內(nèi)部存儲(chǔ)空間有限,可貴,安全,穩(wěn)定,所以應(yīng)該用來(lái)保存比較重要的數(shù)據(jù),比如用戶信息資料,口令秘碼等不需要與其他應(yīng)用程序共享的數(shù)據(jù)。也可以用來(lái)創(chuàng)建臨時(shí)文件,但一定要注意及時(shí)刪除。另外,對(duì)于內(nèi)部存儲(chǔ)還有一個(gè)非常重要的特點(diǎn),那就是在應(yīng)用程序被卸載時(shí),應(yīng)用程序在內(nèi)部存儲(chǔ)空間的文件數(shù)據(jù)將全部被 刪除。系統(tǒng)這樣做的原因很簡(jiǎn)單,就是因?yàn)閮?nèi)部存儲(chǔ)很有限,它必須保證它的可用性,因?yàn)橐坏┨頋M,系統(tǒng)將無(wú)法再正常工作。1.External Storage外部存儲(chǔ)空間再來(lái)談?wù)勈謾C(jī)外部存儲(chǔ)空間,與內(nèi)部存儲(chǔ)空間相對(duì),外部存儲(chǔ)空間
17、是指手機(jī)出廠的時(shí)候不存在,用戶在使用時(shí)候可以自由添加的外部存儲(chǔ)介質(zhì)比如TS卡,SD卡等閃存儲(chǔ)介質(zhì)。這些閃存介質(zhì)由最初的空間小價(jià)格貴,到現(xiàn)在的大容量?jī)r(jià)格便宜,所以幾乎每個(gè)支持外部存儲(chǔ)的手機(jī)上面都有大容量(大于等于2G)的閃存卡。An droid也是不例外,它完全支持外部存儲(chǔ)介質(zhì)。其實(shí)更確切的說(shuō),它是要依賴于外部存儲(chǔ)卡的,因?yàn)閷?duì)于An droid系統(tǒng),如果沒(méi)有外部存儲(chǔ)卡,很多的系統(tǒng)應(yīng)用無(wú)法使用,比如多媒體相關(guān)的應(yīng)用程序無(wú)法使用。雖然An droid很依賴,但是外部存儲(chǔ)卡也有它自身的特點(diǎn),它最大的優(yōu)點(diǎn)就是存儲(chǔ)空間大,基本上你可無(wú)限制的使用, 也不怎么擔(dān)心去清除數(shù)據(jù)。就目前來(lái)看,很多程序都在使用外部存
18、儲(chǔ)卡,但很少有程序去主動(dòng)清理數(shù)據(jù),所以無(wú)論你的SD卡有多大,它的可用空間卻越來(lái)越少。與內(nèi)部存儲(chǔ)不同的是,當(dāng)程序卸載時(shí),它在外部存儲(chǔ)所創(chuàng)建的文件數(shù)據(jù)是不會(huì)被清除的。所以清理外部存儲(chǔ)空間的責(zé)任丟給了用戶自己,每隔一段時(shí)間就去查看下SD卡,發(fā)現(xiàn)無(wú)用數(shù)據(jù)立馬刪除。外部存儲(chǔ)的缺點(diǎn)就是不是很穩(wěn)定,對(duì)于An droid手機(jī)來(lái)講可以說(shuō),很不穩(wěn)定,本身閃存介質(zhì)就容易出問(wèn)題,SD卡處于不能正常使用的狀態(tài)十分多。先來(lái)說(shuō)說(shuō)外部存儲(chǔ)相關(guān)的使用方法和API: a.Check media availability檢查介質(zhì)的可用性 如前所述,外部存儲(chǔ)介質(zhì)的穩(wěn)定性十分的差,所 以在使用之前一定要先檢查它的可用性,如果可用再去用
19、view plaincopy to clipboardprint?1.fi nalString state =(state.equals(E nvironmen t.MEDIA_MOUNTED) state.equals(E nviro nmen t.MEDIA_READ_ONL clipboardpri nt?1.fi nalString state(state.equals(E nvironmen t.MEDIA_MOUNTED) state.equals(E nviro nmen t.MEDIA_READ_ONL En viro nmen t.getExternalStorageStat
20、e(); if state.equals(E nviro nmen t.MEDIA_READ_ONLEn viro nmen t.getExternalStorageState();2.ifIIY) / sd card is ready to us view pla in copy to=Environmen t.getExternalStorageState();if| Y) / sd card is ready to us final String state =(state.equals(Environmen t.MEDIA_MOUNTED)|Y) / sd card is ready
21、to us b. Get the directory獲取外部存儲(chǔ)卡的路徑事實(shí)上,外部存儲(chǔ)卡的路徑是"/mnt/sdcard",所以你直接這樣寫去訪問(wèn)也能訪問(wèn)的到。鑒于可讀性和可移植性的考慮,建議這樣寫:view pla in copy toclipboardpri nt? 1.File sdcardDir = En viro nmen t.getExter nalStorageDirectory(); view pla in copy to clipboardprint? 1.File sdcardDir = Environment.getExternalStorageDi
22、rectory(); File sdcardDir = En viro nmen t.getExter nalStorageDirectory(); c. For API 8 or greater, there are some other useful APIs helping to manager files and directories. 如果你使用 API 8(Android 2.2)或者更高,那么 SDK中又多了幾個(gè)操作外部存儲(chǔ)文件和路徑的接口,文檔中也建議開始者更加規(guī)范的使用 SD卡。比如,創(chuàng)建相應(yīng)的目錄去存儲(chǔ)相應(yīng)的數(shù)據(jù),Music, Picture,Video等。應(yīng)用程序目錄也
23、變成了 "/Android/data/package-name/data"。具體的使用可以參考文檔,這里不重復(fù)。當(dāng) 然,就像編程規(guī)范一樣,這里只是規(guī)范,你完全可以不遵守它,但出于可讀性和可移植性, 還是建議按照文檔建議的去做。下面總結(jié)一下使用時(shí)應(yīng)該注意的一些和外部存儲(chǔ)的特點(diǎn):a.外部存儲(chǔ)卡不是隨時(shí)想用就能夠用的,所以一定要記得在使用之前檢查它的可用性b.存儲(chǔ)在外部存儲(chǔ)卡上的數(shù)據(jù)是所有應(yīng)用程序都可見(jiàn),用戶也可見(jiàn)(使用FileManager),所以安全性不是很好,雖然文檔聲稱可以在外部存儲(chǔ)卡上寫程序私有數(shù)據(jù),但貌似沒(méi)用,用FileManager仍然可以刪除或編輯文件( Mark
24、et上面的FileManager功能都十分的強(qiáng)大,能 讓用戶看到SD卡中的所有文件,和操作能看到的文件)。c. An droid手機(jī)支持把外部存儲(chǔ)卡Mount至PC做為U盤,當(dāng)連接數(shù)據(jù)線時(shí),這時(shí)SD卡變成了 U盤連接到了另外的操作系統(tǒng)中。什么意思,就是在An droid當(dāng)中雖然有的文件屬性(隱藏,私有等),到了 PC上就不一定管用了,用戶在PC上可以隨意操作文件(這就是第二點(diǎn)中所提及的)。d.如果使用外部存儲(chǔ)卡保存數(shù)據(jù),一定要額外做好異常處理:外部存儲(chǔ)卡不可用時(shí)把數(shù)據(jù)存入哪里; 可用的時(shí)候再怎么同步數(shù)據(jù)(這是比較頭疼的地方,可行的做法就是當(dāng)SD卡不可用時(shí)不準(zhǔn)用戶寫數(shù)據(jù),但這用戶體驗(yàn)又不是很好,
25、但如你所知,很多應(yīng)用都這么干);你的數(shù)據(jù)被破壞了。當(dāng)然常見(jiàn)的異常也要考慮,比如空間滿了,無(wú)法寫入,磁盤壞道等。1.SQLite Database數(shù)據(jù)庫(kù)An droid對(duì)數(shù)據(jù)庫(kù)的支持很好,它本身集成了SQLite數(shù)據(jù)庫(kù),每個(gè)應(yīng)用都可以方便的使用它,或者更確切的說(shuō),An droid完全依賴于SQLite數(shù)據(jù)庫(kù),它所有的系統(tǒng)數(shù)據(jù)和用到 的結(jié)構(gòu)化數(shù)據(jù)都存儲(chǔ)在數(shù)據(jù)庫(kù)中。它具有以下優(yōu)點(diǎn):a.效率出眾,這是無(wú)可否認(rèn)的b.十分適合存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)c.方便在不同的Activity ,甚至不同的應(yīng)用之間傳遞數(shù)據(jù) 先前有篇文章講到了不同 Activity和不同應(yīng)用之間傳遞數(shù)據(jù)的麻煩,特別是對(duì)于大型數(shù)據(jù)結(jié)構(gòu),因?yàn)锳ctivity雖是Java對(duì)象,但去無(wú)法像使用其他類對(duì)象那樣去創(chuàng)建一個(gè)實(shí)例然后使用它, 更無(wú)法給Activity加上Setters和Getters (雖然這樣做了沒(méi)有編譯錯(cuò)誤)。比較好的解決方案 就是把結(jié)構(gòu)化數(shù)據(jù)寫入數(shù)據(jù)庫(kù),然后在不同的Activity之間傳遞它們的 Uri。 d.由專門的Conte
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度門面房出租與租賃期限調(diào)整合同
- 二零二五年度診所負(fù)責(zé)人安全責(zé)任免除合同
- 服務(wù)器采購(gòu)合同共
- 無(wú)人機(jī)研發(fā)制造投資合同
- 水利設(shè)施施工合同
- 高考語(yǔ)文復(fù)習(xí)-文言文專題訓(xùn)練-《遼史》
- 高考語(yǔ)文復(fù)習(xí):文言文霍去病專練
- 農(nóng)業(yè)產(chǎn)業(yè)孵化項(xiàng)目合作協(xié)議書
- 業(yè)務(wù)流程外包服務(wù)協(xié)議內(nèi)容詳訂
- 數(shù)字媒體設(shè)計(jì)技能考核點(diǎn)
- 2025年哈爾濱職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完美版
- 私募股權(quán)投資基金基礎(chǔ)知識(shí)-《私募股權(quán)投資基金基礎(chǔ)知識(shí)》高分通關(guān)卷5
- 老年重癥患者靜脈血栓栓塞癥預(yù)防中國(guó)專家共識(shí)(2023)解讀
- 北師大版四年級(jí)數(shù)學(xué)下冊(cè)期末測(cè)試卷(一)(含答案)
- 2025年云南省曲靖市富源縣能源局公開招聘引進(jìn)煤礦安全監(jiān)管急需緊缺人才筆試高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 初中語(yǔ)文新人教部編版七年級(jí)下冊(cè)第一單元核心素養(yǎng)教案(2025春詳細(xì)版)
- 校園春季傳染病預(yù)防
- 婦產(chǎn)科學(xué)(甲)知到智慧樹章節(jié)測(cè)試課后答案2024年秋浙江大學(xué)
- 《小學(xué)數(shù)學(xué)“對(duì)分課堂”教學(xué)模式的實(shí)踐探索》3900字(論文)
- 初中數(shù)學(xué)幾何《旋轉(zhuǎn)模型費(fèi)馬點(diǎn)》壓軸題含答案解析
- 2025年中國(guó)中信集團(tuán)招聘筆試參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論