Re:从零开始的安卓数据存储学习生活(开篇)

1,425 阅读3分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

前言

生命不止,学习不息,相信数据库在掘友们那早已不是个陌生的字眼,但它的确在每个领域都绽放着自己与众不同的形式,而我们安卓开发也有着不一样的数据库存储方式,学习它就宛如迈进一个新世界大门,今天就让我们来了解这个异世界的奇妙之处。

正篇

正如486在异世界可以不断的重来回档,我们数据库也是有着还原备份的异曲同工之妙。 而说到数据库存储就需要有-数据持久化技术,下面解释一下这个专业名词:

数据持久化:指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或计算机关机的情况下,这些数据仍然不会丢失。保存在内存中数据处于瞬时状态(临时的),而保存在存储设备中的数据是处于持久状态的。

所以我们可以看出,持久化技术本质就是提供一个机制,可以让数据在瞬时状态和持久状态反复横跳。

安卓的三大数据持久化功能

而安卓就为我们提供了三种方式可以简单地去实现数据持久化功能:

  • 文件存储
  • SharedPreferences存储
  • 数据库存储

首先我们可以先简单了解一下这三种方法在安卓的使用,本章先把第一种方法简单说明一下

文件存储

顾名思义,即通过文件来保存数据,我们是使用安卓中Context类提供的openFileOutput()方法把数据存储到知道的文件中:

image.png

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()
    }
}

image.png

这个方法中有两个参数,第一个是我们需要的文件名,后则是文件的操作模式,主要是两个模式可选:MODE_APPEND, MODE_PRIVATE,默认是 MODE_PRIVATE模式,代表如果文件指定有同名文件,则写入内容直接覆写原文件内容,而MODE_APPEND则表示文件名存在时往该文件中追加内容,不存在就创建新文件,此外,该方法中获取的返回值FileOutputStream对象,该对象获取到就可以使用Java流把我们想存的数据写入文件。

image.png

除此以外,我们可以看到代码中还使用了一个use函数,这是Kotlin提供的一个内置扩展函数,能够保证在Lambda表达式中的代码全执行结束后自动将外层的流关闭,这就不再需要我们再编写一个finally语句来手动关闭流。

image.png

image.png

由于Kotlin语言没有异常检查机制(checked exception),故在Kotlin编写代码不会强制要求你添加异常捕获与抛出,因此即使不写try catch代码块一样可以在Kotlin中编译通过。(这涉及到Kotlin取消Checked Exception的原因,事关Java和Kotlin语言的一些争议,反正可以写try catch,需要就写)

总结

其实本文只是开了个头,仅仅就说明了文件存储的存入文件使用方法,还解释了一下数据存储的一些基本概念,后续随着学习的深入,我们会看到其实数据存储是非常好用的,毕竟我们是站在巨人肩膀上的,会使用即可,不用想那么多原理,只是有时候为了更好的使用,我们就会深入一下源码,去一窥前人的智慧。 还是一句话:

路漫漫其修远兮,吾将上下而求索