IO流学习总结
一、流的分类
按流的方向分类:
输入流:数据源到程序(InputStream、Reader 读进来)。
输出流:程序到目的地(OutPutStream、Writer 写出去)。
按流的处理数据单元分类:
字节流:按照字节读取数据(InputStream、OutputStream)。
字符流:按照字符读取数据(Reader、Writer)。
按流的功能分类:
节点流:可以直接从数据源或目的地读写数据。
处理流:不直接连接到数据源或目的地,是处理流的流。通过对其他流的处理提高程序的性能。
二、常用流的描述
文件字节流:以字节的形式读写文件
文件字符流:以字符的形式读写文件
缓冲字节流:为字节流增加缓冲,提高文件的读取速度
字节数组流:读写内容,返回byte[]数组
数据流:对文件读写各种类型的数据
转换流:字节流与字符流之间的转换,主要是字节流转为字符流
对象流:对文件进行对象的读写
三、IO流相关类
四大基本抽象类InputStream、OutputStream、Reader、Writer
3.1InputStream类
实现类:
FileInputStream
ByteArrayInutStream
BufferedInputStream
DataInputStream
ObjectInputStream
此抽象类是表示字节输入流的所有类的父类。InputSteam 是一个抽象类,它不可以实例化。 数据的读取需要由它的子类来实现。根据节点的不同,它派生了不同的节点流子类 。
继承自 InputSteam 的流都是用于向程序中输入数据,且数据的单位为字节(8 bit)。
常用方法:
int read():读取一个字节的数据,并将字节的值作为 int 类型返回(0-255 之间的一个值)。如果未读出字节则返回-1(返回值为-1 表示读取结束)。
void close():关闭输入流对象,释放相关系统资源。
3.2OutputStream类
实现类:
FileOutputStream
ByteArrayOutputStream
BufferedOutputStream
DataOutputStream
ObjectOutputStream
PrintStream
此抽象类是表示字节输出流的所有类的父类。输出流接收输出字节并将这些字节发送到某个目的地。
常用方法:
void write(int n):向目的地中写入一个字节。
void close():关闭输出流对象,释放相关系统资源。
3.3Reader类
实现类:
FileReader
BufferedReader
InputStreamReader
Reader 用于读取的字符流抽象类,数据单位为字符。
常用方法:
int read(): 读取一个字符的数据,并将字符的值作为 int 类型返回(0-65535 之间的一个值,即 Unicode 值)。如果未读出字符则返回-1(返回值为-1 表示读取结束)。
void close() : 关闭流对象,释放相关系统资源。
3.4Writer类
实现类:
FileWriter
BufferedWriter
OutputStreamWriter
Writer 用于输出的字符流抽象类,数据单位为字符。
常用方法:
void write(int n): 向输出流中写入一个字符。
void close() : 关闭输出流对象,释放相关系统资源。
四、File类使用
作用:File 类是 Java 提供的针对磁盘中的文件或目录转换对象的包装类。一个 File 对象而可以代表一个文件或目录,File 对象可以实现获取文件和目录属性等功能,可以实现对文件和目录的创建,删除等功能。
针对文件的操作方法:
createNewFile():创建新文件。
delete():直接从磁盘上删除
exists():查询磁盘中的文件是否存在
getAbsolutePath():获取绝对路径
getPath():获取相对路径
getName():获取文件名 相当于调用了一个 toString 方法。
isFile():判断是否是文件
length():查看文件中的字节数
isHidden():测试文件是否被这个抽象路径名是一个隐藏文件。
针对目录的操作方法:
exists():查询目录是否存在
isDirectory():判断当前路径是否为目录
mkdir():创建目录
getParentFile():获取当前目录的父级目录。
list():返回一个字符串数组,包含目录中的文件和目录的路径名。
listFiles():返回一个 File 数组,表示用此抽象路径名表示的目录中的文件。
五、序列化与反序列化
把 Java 对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为 Java 对象的过程称为对象的反序列化。
ObjectOutputStream 代表对象输出流,它的 writeObject(Object obj)方法可对参数指定的obj 对象进行序列化,把得到的字节序列写到一个目标输出流中。
ObjectInputStream 代表对象输入流,它的 readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
只有实现了 Serializable 接口的类的对象才能被序列化。Serializable 接口是一个空接口,只起到标记作用。
六、思维导图