![Android程序员面试笔试宝典](https://wfqqreader-1252317822.image.myqcloud.com/cover/682/39130682/b_39130682.jpg)
上QQ阅读APP看书,第一时间看更新
5.1 文件流
在讲Android的数据库框架前,先需要一定篇幅来讲解一下Java文件流,因为在实际开发中,开发者会经常跟文件流数据打交道,也就是对文件流数据进行存储读取。
Java文件流分两类,字节流和字符流,如图5.1所示。
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/95_01.jpg?sign=1739912910-nQezVrUBX4Nze7WVEF6SYrybMiAA26D2-0-47f16a67535d9a65ff0b7f475eb20c5e)
图5.1 Java文件流
字节流,以字节方式在文件中读取数据或者向文件中写入数据;字符流,则以字符形式读写文件。可以看到在字节流中有两个缓冲流:BufferedInputStream和BufferedOutputStream。BufferedInputStream是带有缓存区的,每次读取会首先从缓冲区读取数据,如果缓存区没有数据,则从文件读取数据,然后把读取到的数据放入缓存区中进行缓存,以供下次读取时使用;如果缓存区有数据,则直接把缓存区的数据返回给调用者。因为从缓存区读取数据比从文件读取数据要快,所以使用BufferedInputStream会提高I/O操作效率。同理,BufferedOutputStream是写入缓冲流,把缓冲区的数据写进到文件中去,这样比仅仅使用FileOutputStream一字节一字节写要快得多,所以使用BufferedOutputStream效率就会高很多。
Java的流操作如下:
1)创建文件对象:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/95_02.jpg?sign=1739912910-g77CNxb2k4olEO6ElsSkKnp9c2QPICMt-0-d676d344b86138bea182696294c83605)
2)使用字节流或字符流:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/96_01.jpg?sign=1739912910-yg7Tgof5AvU6nsbOh2KZw39bR2JDcfsh-0-ecbd627894c69b7c0826385aae9bff4e)
3)可以使用缓冲流继续装载:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/96_02.jpg?sign=1739912910-4d4keyE8ZI7WwZmafdukHu5WnqZXQ9zB-0-a381c204b1a8fc74deaee5dcc8c5aab9)
4)读写操作:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/96_03.jpg?sign=1739912910-hU7xZ1k9Lvgr2QEmP4WID88hEumhUope-0-8f04579de17fd7554d09028a4ffac858)
而Android中的文件存储与Java的文件流操作类似,读取文件数据的代码如下:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/96_04.jpg?sign=1739912910-iZVkdoSgTungetsxmBBSKugdfqPd8WoH-0-66458827260b1d1534b477a1912d2002)
同样,如果要将一些数据写进到上文的相应文件里,可以使用下面的代码来实现:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/97_01.jpg?sign=1739912910-OK3N8pv2P3gShiYiIl9qZFD8aSQyEDnW-0-eb68e451ca02e2ef0b76bf1e3fdd470d)