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í)