正篇
正如486在异世界可以不断的重来回档,我们数据库也是有着还原备份的异曲同工之妙。 而说到数据库存储就需要有-数据持久化技术,下面解释一下这个专业名词:
数据持久化:指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或计算机关机的情况下,这些数据仍然不会丢失。保存在内存中数据处于瞬时状态(临时的),而保存在存储设备中的数据是处于持久状态的。
所以我们可以看出,持久化技术本质就是提供一个机制,可以让数据在瞬时状态和持久状态反复横跳。
安卓的三大数据持久化功能
而安卓就为我们提供了三种方式可以简单地去实现数据持久化功能:
- 文件存储
- SharedPreferences存储
- 数据库存储
首先我们可以先简单了解一下这三种方法在安卓的使用,本章先把第一种方法简单说明一下
文件存储
顾名思义,即通过文件来保存数据,我们是使用安卓中Context类提供的openFileOutput()方法把数据存储到知道的文件中:
fun save(inputText: String) { try { val output = openFileOutput("data", Context.MODE_PRIVATE) val writer = BufferedWriter(OutputStreamWriter(output)) writer.use { it.write(inputText) } } catch (e: IOException) { e.printStackTrace() } }
这个方法中有两个参数,第一个是我们需要的文件名,后则是文件的操作模式,主要是两个模式可选:MODE_APPEND, MODE_PRIVATE,默认是 MODE_PRIVATE模式,代表如果文件指定有同名文件,则写入内容直接覆写原文件内容,而MODE_APPEND则表示文件名存在时往该文件中追加内容,不存在就创建新文件,此外,该方法中获取的返回值FileOutputStream对象,该对象获取到就可以使用Java流把我们想存的数据写入文件。
除此以外,我们可以看到代码中还使用了一个use函数,这是Kotlin提供的一个内置扩展函数,能够保证在Lambda表达式中的代码全执行结束后自动将外层的流关闭,这就不再需要我们再编写一个finally语句来手动关闭流。
由于Kotlin语言没有异常检查机制(checked exception),故在Kotlin编写代码不会强制要求你添加异常捕获与抛出,因此即使不写try catch代码块一样可以在Kotlin中编译通过。(这涉及到Kotlin取消Checked Exception的原因,事关Java和Kotlin语言的一些争议,反正可以写try catch,需要就写)
总结
其实本文只是开了个头,仅仅就说明了文件存储的存入文件使用方法,还解释了一下数据存储的一些基本概念,后续随着学习的深入,我们会看到其实数据存储是非常好用的,毕竟我们是站在巨人肩膀上的,会使用即可,不用想那么多原理,只是有时候为了更好的使用,我们就会深入一下源码,去一窥前人的智慧。 还是一句话:
路漫漫其修远兮,吾将上下而求索