Java IO流的分类
1 按流向划分:输入流和输出流
2 按处理单元划分:字节流和字符流
3 按流的角色划分:节点流和处理流
输入流
主要由inputStream和Reader作为基类
只能读取数,不能写入数据的流,实现程序从数据源中读取流
输出流
主要由OutputStream和Write作为基类
只能写入流,不能从中读取数据,实现程序向目标数据源中写数据
void write(String str) | 将str字符串中包含的字符输出到输出流中 |
void write(String str,int off,int len) | 将字符串中从off位置开始,长度为len的字符输出到输出流中 |
void colse() | 关闭输出流 |
void flush() | 刷新输出流 |
缓冲流
Java缓冲流自身并不具有IO功能,只是在别的流上增加缓冲,以提高程序性能分类
字节缓冲流
字符缓冲流:
1.BufferedWrite类
是Writer类的子类,带有缓冲区
默认情况下,只有缓冲区满的时候,才会把缓冲区的数据真正写到目的地,能减少物理写数据的次数,提高输入/输出操作的执行效率
常用构造方法
BufferedWrite(Writer out) | 创建一个缓冲字符输出流 |
2.BufferedReader类
Reader类的子类
带有缓冲区,提高文件读取的效率
把一批数据读到缓冲区
从缓冲区内获取数据
常用构造方法
BufferedReader(Reader in ) | 创建一个缓冲字符输入流 |
数据操作流
对二进制文件读写操作
分类
-
DataOutputStream类
-
OutputStream类的子类
-
与FileOutputStream类结合使用写二进制文件
-
-
DataInputStream类
-
InputStream类的子类
-
与FileInputStream类结合使用读取二进制文件
-
节点流
可以直接向一个特定的存储介质(如磁盘、文件)读写数据的流
使用节点流进行读写数据操作时,程序直接连接到数据源、
处理流
对已存在的流进行连接和封装,通过封装后的流实现数据读写操作的流
使用处理流进行读写操作时,程序并不会直接连接到实际的数据源
使用处理流包装节点流,通过处理流执行输入和输出功能,让节点流与文件或磁盘等存储设置交互,可隐藏底层节点流的差异
字节流
以8位字节位操作数据单元的流,可操作文本数据
可细分位字符输入流、字符输出流
字符流
以16位字符位操作数据单元的流,可操作文本数据
可细分为字符输入流、字符输出流
字符流字节流区别
操作的数据单元不同
输入流主要由InputStream和Reader作为基类
输出流则主要由OutputStream和Writer作为基类
都是抽象类,无法直接实例化对象
字节输出流的基类:OutputStream
void close() | 关闭输出流 |
void flush() | 刷新缓冲区 |
void write(byte[]b) | 将每个byte数据写入数据流 |
void write(byte[] b,int off,int len) | 将每个指定范围的byte数据写入数据流 |
void write(int b) | 将一个字节数据写入数据流 |
字符输出流基类:Reader
int read() | 从输入流中读取单个字符,返回所读取的字符数据 |
int read(char[] c) | 从输入流中最多读取c.length个字符数据,并将其存储在字符数组c中,返回实际读取的字符数 |
int read(char[] c,int off,int len) | 从输入流中最多读取len个字符的数据,并将其存储在字符数组c中时,并不是从数组起点开始,返回实际读取的字符数 |
字节输出流FileOutputStream类
FileOutputStream(File file) | 创建向指定File对象写数据的文件输出流 file: 指定目标文件的对象 |
FileOutputStream(String name) | 创建向指定路径的文件写数据的文件输出流name: 指定目标文件的路径字符串 |
FileOutputStream(String name,boolean append) | 创建一个向指定路径的文件写入数据的文件输出流 name:指定目标文件的路径字符串append:表示是否在文件末尾追加数据。如果为true,则表示可以在文件末尾追加数据 |
字节输入流的基类:InputStream
int read() | 读取一个字节数据 |
int read(byte[] b) | 将数据读取到字节数组中 |
int read(byte[] b,int off,int len) | 从输入流中读取最多len长度的字节,保存到字节数组中,保存的位置从off开始 |
void close() | 关闭输入流 |
int available() | 返回输入流读取的字节数 |
序列化与反序列化
方便数据传输和存储
序列化是将对象的状态存储带特定的存储介质中的过程
反序列化时将特定的存储介质中数据重新构建对象的过程
对象输出流(ObjectOutputStream):实现序列化
对象输入流(ObjectInputStream):实现反序列化
一个类实现java.io.Serializable接口,该类的对象事可序列化的
public interface Serializble{} 一个标识接口
ObjectOutputStream(ObjectStream out) | 创建对象输出流对象 | 构造方法 |
final void writeObject(Object obj) | 将指定对象写入流 | 实例方法 |