1.概述
1.Java程序通过流来读写文件。流是指一连串流程的字符,是以先进先出的方式发送和接收数据的通道。
2.流分为输入流和输出流,输入/输出流是相对于计算机内存来说的。数据存储到内存中,则为输入流;从内存输出数据,则为输出流。
3.读文件是指从文件中读取数据到内存中;写文件是指把内存中的数据写入到文件中。
4.Java的输出流主要有OutputStream类和Writer类作为基类,输入流主要由InputStream类和Reader类作为基类。在程序中,这些输入/输出流类的对象称为流对象。
5.可以通过流对象将内存中的数据以流的方式写入文件,也可以通过流对象将文件中的数据以流的方式读取到内存。
6.构造流对象时往往会和数据源(如文件)联系起来。数据源分为源数据源和目标数据源。输入流关联的是源数据源;输出流关联的是目标数据源。
2.字节流和字符流
输入/输出流分为字节流和字符流。
字节流:8位通用字节流,基本单位是字节。字节流的基类是InputStream类和OutputStream类,这两个类都是抽象类,不能实例化。
字符流:16位Unicode字符流,基本单位是Unicode字符。字符流的基类是Reader类和Writer类,这两个类都是抽象类,不能实例化。
InputStream类常用方法:
InputStream类的常用子类FileInputStream,用于从文件中读取数据。
OutputSream类常用方法:
OutputStream类的常用子类FileOutputStream,用于向文件写入数据。
Reader类常用方法:
Reader类常用子类BufferedReader,接受Reader对象作为参数,并对其添加字符缓冲器。
Writer类常用方法:
Writer类的常用子类有BufferedWriter,用于将数据缓冲到字符输出流。
3.字符流VS字节流
字符流最适合用来处理字符串和文本,因为它们支持国际上大多数的字符集和语言。
在操作上字节流和字符流还有一个区别,字符流在操作时使用了缓冲区(内部存储器),而字节流在操作时直接操作文件,不会使用缓冲区。