1.Android中提供哪些数据持久存储的方法?
1.File文件存储 2.sharedPreferences 3. SQLite数据库存储
2.Java中的I/O流读写怎么做?
当使用集合持有数据时,这些数据都存在于内存中,一旦程序运行结束,这些数据将会从内存中清除,下次再想使用这些数据,已经没有了。 如果希望将运算永久地保存下来,可以使用IO,将这些数据持久化存储起来。
一 JAVA语言中主要通过流来完成IO操作。
输入流:从程序外部传向程序的流。输入流只能从中读数据。
输出流: 从程序传到外部的流。输出流只能向其写入数据。
二 字节流
字节流是以字节为传输单位的数据读写形式,用于直接读取二进制数据,如图像和声音文件等。
InputStream和OutputStream分别为面向字节的输入流类的父类和输出流类的父类。InputStream和OutputStream都是抽象类。FileInputStream和FileOutputStream是文件流类,他们是InputStream和OutputStream的子类。FileInputStream类的一般用法是:先创建一个FileInputStream对象关联到要读取的文件,然后调用read方法读取字节数据到程序中,再进行其他处理。因为read方法是按字节的读入的,所以汉字被读入时会出现乱码。FileOutputStream类的一般用法是:先创建一个FileOutputStream对象关联到要写入的文件,然后调用write方法将字节数据写到程序中。如果进行写操作的文件不存在,则自动创建该文件,但是如果文件所在的路径也不存在,则运行时会报错。例如
FileOutputStream fos = new FileOutputStream("D:\\test.txt");是不会报错的,
FileOutputStream fos = new FileOutputStream("D:\\tmp\\test.txt");如果之前在D盘中没有tmp这个文件夹,那么此时运行这条语句会报错。
三 字符流
Reader 和 Writer类是所有字符流的父类。一次读取或是写入两个字节,16位,即一个Unicode字符,因此可以使用字符流直接读写汉字内容。
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
使用缓存流可以提高大文件的读写效率。例如从文件读入数据时,每次从输入流中读取较大的数据量存入内存缓冲区,具体的读操作针对该缓冲区进行;执行缓冲输出时,每次将输出流中的数据写入到内存缓冲区,知道缓冲区写满,才将数据写入到最终的介质中。
使用缓存流的缺点:当计算机突然关闭时,可能会丢失数据。通过清空缓冲区的数据可以减少这种情况的发生,使用flush()方法即可。
3.SharePreferences适用情形?使用中需要注意什么?
SharedPreferences是一种轻型的数据存储方式,主要用于存储简单的配置信息,如int、string、boolean、float和long,他的本质是基于XML的key-value键值对数据
实现SharedPreferences存储的步骤如下:
(1)调用getSharedPreferences()方法获得SharedPreferences对象,提供两个参数,指定文件名和操作模式。
(2)调用SharedPreference对象的edit()方法获得SharedPreferences.Editor引用对象
(3)调用Edit接口的形如put某某某()方法以键值对形式保存某某某类型的数据
(4)调用Edit接口的commit()方法提交键值对。
一定注意,不用SharedPreferences对象去存储或修改数据,而是通过Editor对象。但获取数据时需要调用SharedPreferences对象的get某某某()方法了。
4.了解SQLite中的事务处理吗?是如何做的?
![](https://img.haomeiwen.com/i11578146/c4e99c8315b3a106.png)
如果在执行SQL操作的时候,插入两条信息,这时就是一组事物,只有两个插入都完成,才会调用标记事务完成,而如果没有完成,在结束事务的时候发现db.setTransactionSuccessful();没有调用,就会回滚,将第一次插入操作放弃,还原为之前的情况,只有在事务顺利结束,才表示操作都执行完成了
5.如果现在要删除SQLite中表的一个字段如何做?
6.使用SQLite时会有哪些优化操作?
一 创建索引
索引有助于加快 SELECT 查询和 WHERE 子句,但它会减慢使用 UPDATE 和 INSERT 语句时的数据输入。索引可以创建或删除,但不会影响数据。
二 使用事务
原子性操作,要么全部成功,要么全部失败;在执行大量数据的插入操作时,避免频繁操作cursor,可以大幅减少insert操作时间,一般为1-2个量级
网友评论