详细内容,可查看:
https://blog.csdn.net/qq_25184739/article/details/512051861. 分类
根据操作对象分为:字节流和字符流,两者的却别在于:字节流处理8 bit的字节,字符流处理16 bit的字符。
Java中字符采用Unicode标准,字符流的本质就是在字节流的基础上增加了编码和解码,也就是查ASCII表的过程。
字节流以InputStream和OutPutStream为基类,字符流以Reader和才为基类。
InputStream和Reader处理输入流,OutPutStream和Writer处理输出流。
操作二进制文件,尽量使用字节流,操作文本文件,尽量使用字符流。
2. java输入/输出流体系中常用的流的分类表
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
访问数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
访问字符串 | StringReader | StringWriter | ||
缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
转换流 | InputStreamReader | OutputStreamWriter | ||
对象流 | ObjectInputStream | ObjectOutputStream | ||
抽象基类 | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
打印流 | PrintStream | PrintWriter | ||
推回输入流 | PushbackInputStream | PushbackReader | ||
特殊流 | DataInputStream | DataOutputStream |
注:表中粗体字所标出的类代表节点流,必须直接与指定的物理节点关联:斜体字标出的类代表抽象基类,无法直接创建实例。
3. 字符缓冲流
BufferedWriter和BufferedRead是为了提高字符流的读写操作,引入的缓冲机制,进行批量字符的读写,加速了单个字符的处理速度。构造器分别需要指定一个Writer对象和Reader对象,可理解为是Writer和Reader的增强器,因为不使用字符缓冲,也可以正常IO,只是效率比较低。
4. 转换流
转换流包含InputStreamReader和OutpuStreamWriter两个类,是连接字节流和字符流的桥梁,实现了两者之间的转换。
InputStreamReader:将字节流转换为字符流输入,FileReader是实现其功能的子类。
OutputStreamWriter:将字节流转换为字符流输出,FileWriter是实现其功能的子类。
什么时候需要使用转换流:
1> 当字节和字符之间有转换动作时;
2> 当处理的流数据,需要编码或解码时.
举例:字符缓冲输出流
Writer fw = new OutputStreamWriter(path, "urf-8");
BufferWriter bw = new BufferWriter(fw);
bw.write(str);
bw.flush();
bw.closw();
当我们使用处理流对字节流或者字符流进行包装时,只需要关闭最上层的处理流即可,java会自动帮我们关闭底层的字节流或者字符流。