流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图:
java.io包是一组流类,分为:
字节流:抽象父类是InputStreamOutputStream
字符流:抽象父类是Reader和Writer
1、 InputStream
InputStream类的体系结构
FileInputStream 类:从实际磁盘文件读取数据
ByteArrayInputStream 类:在字节数组中执行读写操作
StringBufferInputStream 类:类似于ByteArrayInputStream,将字符串用作内部缓冲器
2、OutputStream
定义用于写入字节或字节数组的方法。
OutputStream类的体系结构
FileOutputStream类:创建文件(如果文件不存在),并将数据写入文件
ByteArrayOutputStream类:在内存中创建缓冲器,toByteArray( )和toString( )方法用于数据检索
FilterOutputStream类:高层输出流
File 类:提供定位本地文件系统、描述文件和目录的功能,是 java.io 包中引用实际磁盘文件的唯一对象。
流类可以分为:
底层流:包含以字节的形式读写的方法
高层过滤器流:用于读写高层信息
高层流要求底层流作为基础。
FilterInputStream 类的子类包括:
DataInputStream类:提供读取任意对象的能力
DataOutputStream类:提供写入任意对象的能力
BufferedInputStream类:允许程序一次一个字节地从流读取数据
BufferedOutputStream类:允许程序一次一个字节地向流写入数据
PrintStream类:用于写入文本或基本类型
3、Reader
读取字符类型。
Reader类的体系结构
FileReader:使读取字符文件成为可能
StringReader:读取字符串的字符
CharArrayReader:允许将字符数组用作输入
InputStreamReader:从输入流读取字节,并将它们转换成字符
FilterReader:允许读取过滤字符流
BufferedReader:接受Reader 对象为参数,并对其添加字符缓冲器
4、Writer
写入字符类型。
Writer类的体系结构
FileWriter:允许将字符类型数据写入文件
CharArrayWriter:允许将字符缓冲器用作输出流
PrintWriter:包含一些使生成格式化输出变得很简单的方法
FilterWriter:用于写入过滤字符流
BufferedWriter:将数据缓冲到字符输出流
BufferedReader:是Reader类的子类,为Reader对象添加字符缓冲器,为数据输入分配内存存储空间,存取数据更为有效。