目录
java.io.BufferedOutputStream缓冲字节输出流,继承自java.io.OutputStream
java.io.BufferedInputStream缓冲字节输出流,继承自java.io.InputStream
java.io.ObjectInputStream对象输入流,继承自java.io.InputStream
java.io.ObjectOutputStream对象输出流,继承自java.io.OutputStream
如果序列化的对象没有实现可序列化接口: java.io.Serializable 就会抛出异常: java.io.NotSerializableException
总结:
1、java将流分为两类:节点流与处理流:
节点流:也称为低级流.
节点流的另一端是明确的,是实际读写数据的流,
读写一定是建立在节点流基础上进行的.处理流:也称为高级流.
处理流不能独立存在,必须连接在其他流上,
目的是当数据流经当前流时对数据进行加工处理来简化我们对数据的该操作.实际应用中,我们可以通过串联一组高级流到某个低级流上以流水线式的加工处理对某设备的数据进行读写,这个过程也成为流的连接,这也是IO的精髓所在.
2、缓冲流
- 缓冲流是一对高级流,在流链接中链接它的目的是加快读写效率。
- 缓冲流内部默认缓冲区为8kb,缓冲流总是块读写数据来提高读写效率。
java.io.BufferedOutputStream缓冲字节输出流,
继承自java.io.OutputStream
- 常用构造器
BufferedOutputStream(OutputStream out):
创建一个默认8kb大小缓冲区的缓冲字节输出流,并连接到参数指定的字节输出流上。BufferedOutputStream(OutputStream out,int size):
创建一个size指定大小(单位是字节)缓冲区的缓冲字节输出流,并连接到参数指定的字节输出流上。- 常用方法
flush():强制将缓冲区中已经缓存的数据一次性写出 缓冲流的写出方法功能与OutputStream上一致,需要知道的时write方法调用后并非实际写出,而是先将数据存入缓冲区(内部的字节数组中),当缓冲区满了时会自动写出一次。
java.io.BufferedInputStream缓冲字节输出流,继承自java.io.InputStream
- 常用构造器
BufferedInputStream(InputStream in):
创建一个默认8kb大小缓冲区的缓冲字节输入流,并连接到参数指定的字节输入流上。BufferedInputStream(InputStream in,int size):
创建一个size指定大小(单位是字节)缓冲区的缓冲字节输入流,并连接到参数指定的字节输入流上。- 常用方法
缓冲流的读取方法功能与InputStream上一致,需要知道的时read方法调用后缓冲流会一次性读取缓冲区大小的字节数据并存入缓冲区,然后再根据我们调用read方法读取的字节数进行返回,直到缓冲区所有数据都已经通过read方法返回后会再次读取一组数据进缓冲区。即:块读取操作
2、对象流
- 对象流是一对高级流,在流链接中的作用是完成对象的序列化与反序列化
- 序列化:是对象输出流的工作,将一个对象按照其结构转换为一组字节的过程。
- 反序列化:是对象输入流的工作,将一组字节还原为对象的过程。
java.io.ObjectInputStream对象输入流,继承自java.io.InputStream
- 常用构造器
- ObjectInputStream(InputStream in):
创建一个对象输入流并连接到参数in这个输入流上。- 常用方法
- Object readObject():
进行对象反序列化,将读取的字节转换为一个对象并以Object形式返回(多态)。
- 如果读取的字节表示的不是一个java对象会抛出异常:
java.io.ClassNotFoundException
java.io.ObjectOutputStream对象输出流,继承自java.io.OutputStream
- 常用构造器
- ObjectOutputStream(OutputStream out):
创建一个对象输出流并连接到参数out这个输出流上- 常用方法
- void writeObject(Object obj):
进行对象的序列化,将一个java对象序列化成一组字节后再通过连接的输出流将这组字节写出。
如果序列化的对象没有实现可序列化接口: java.io.Serializable
就会抛出异常: java.io.NotSerializableException
- 序列化接口java.io.Serrializable
- 该接口没有任何抽象方法,
但是只有实现了该接口的类的实例才能进行序列化与反序列化。- 实现了序列化接口的类建议显示的定义常量:static final long serialVersionUID = 1L;
- 可以为属性添加关键字transient,
被该关键字修饰的属性在序列化是会被忽略,达到对象序列化瘦身的目的。
3、字符流
- java将流按照读写单位划分为字节与字符流。
- 字节流以字节为单位读写,字符流以字符为单位读写。
- 转换流java.io.InputStreamReader和OutputStreamWriter
- 功能无需掌握,了解其核心意义:
- 1:衔接其它字节与字符流
- 2:将字符与字节进行转换
- 相当于是现实中的"转换器"
4、缓冲字符输出流
- 缓冲字符输出流需要记住的是 PrintWriter 和 BufferedReader
- 作用:
- 1:块写或块读文本数据加速
- 2:可以按行写或读字符串
- java.io.PrintWriter 具有自动行刷新的缓冲字符输出流
- 常用构造器
- PrintWriter(String filename) :
可以直接对给定路径的文件进行写操作- PrintWriter(File file):
可以直接对File表示的文件进行写操作
- 上述两种构造器内部会自动完成流连接操作。
- PrintWriter(OutputStream out):
将PW链接在给定的字节流上(构造方法内部会自行完成转换流等流连接)- PrintWriter(Writer writer):
将PW链接在其它字符流上- PrintWriter(OutputStream out,boolean autoflush)
- PrintWriter(Writer writer,boolean autoflush)
- 上述两个构造器可以在链接到流上的同时传入第二个参数,
如果该值为true则开启了自动行刷新功能。- 常用方法
- void println(String line):按行写出一行字符串
- 特点
- 自动行刷新,当打开了该功能后,每当使用println方法写出一行字符串后就会自动flush一次
5、java异常处理机制
- java异常处理机制:
异常处理机制是用来处理那些可能存在的异常,但是无法通过修改逻辑完全规避的场景。
而如果通过修改逻辑可以规避的异常是bug,不应当用异常处理机制在运行期间解决!应当在编码时及时修正
- try语句块用来包含可能出错的代码片段
- catch用来捕获并处理对应的异常,可以定义多个,也可以合并多个异常在一个catch中。
IO总结图:
---(该图出自达内教育:传奇老师)