java.io包的传统IO流对象
一、概述
1.1OOP的实质是通过委托实例来帮我们实现计算机的功能,通过这些类来执行相应的功能。打代码的实质就是看API,熟悉API,掌握API,写API,测试API。
1.2IO流的本质就是数据流对象,也就是资源类,也就是通过这些类来表示文本文件,图片文件,视频文件,声音文件,当然还需要处理这些文件的对象才可以。所以接下来重点解释这些流能帮我们做到什么事。
二、抽象类
原理就是能够把数据拷贝放在内存中,然后我们就去处理这些字节或者字符。
InputStream
输入字节流的父类,表示外部文件输入内存的流对象,能把外部数据输入内存,也就是定义了一块内存空间,让外部数据输入这个空间。
OutputStream
输出字节流的父类,需要接收器,把数据输出到接收器去。
Reader
读取字符流父类,基础数据是字符,功能和字节流一样。
Writer
写入字符流对象。
三、抽象接口
DataInput和DataOutput
实现对基本数据类型的读写,不需要关闭。
对InputStream和OutputStream对象的封装。
ObjectInput和ObjectOutput
扩展了对象、数组、字符串的读写
四、功能接口
AutoCloseable
自动关闭文件接口,close方法将关闭文件,相当于把文件放回去。
JDK1.7以后try-with-resource将会自动关闭try()中流对象。
其中,Closeable extends AutoCloseable。
Flushable
刷新缓存到底层流,流内部的字节或字符数组就是缓存。
Serializable
序列化接口,标志接口,实现此方法才能把对象序列化为文件。
五、实体类
5.1ByteArrayInputStream和ByteArrayOutputStream
ByteArrayInputStream
以内存中字节数组为流输入端,是一种缓存的流对象
ByteArrayOutputStream
以内存中字节数组为流的接收器,输出缓存
ByteArrayInputStream和ByteArrayOutputStream都是自增长的数组,所以通常用来做缓冲区,或者别的流的底层流,最大容量Integer.MAX_VALUE-8,扩容两倍,。
5.2FileInputStream和FileOutputStream
FileInputStream,源数据是文件,读取原始字节流
FileOutputStream,接收器也是文件,写出原始字节流
FileInputStream和FileOutputStream文件读写数据流,会创建文件描述符,文件访问通道等对象,用以完成对计算机底层文件系统的交互。
5.3InputStreamReader和OutputStreamWriter
InputStreamReader将字节流转换为字符流输入到JVM,并将其解码为指定charset(有设置就用JVM的设置,没设置就默认UTF-8),读取过程中按照字符集转换为char[]。
OutputStreamWriter将字符流,转换成字节流输出到接收器
InputStreamReader和OutputStreamWriter都是里面是字符,外面是字节。这两个类是FileReader和FileWriter的父类
怎么用?字符数组编码为指定格式,以流对象写入文件中。
5.4FileReader和FileWriter
就比InputStreamReader和OutputStreamWriter多了几个构造方法
文本文件读写,也是底层字节数组转换为字符数组。
5.5PipedInputStream和PipedOutputSteam
管道流,进程间通信的一种实现方式。
原理:一个缓冲数组(默认大小1024),PipedInputStream负责读,
PipedOutputSteam负责写。通过(notifyAll,wait来实现线程间协作,数组访问互斥)
[1] https://www.jianshu.com/p/e14...
5.6FileChannel 零拷贝
[1] https://www.jianshu.com/p/258...
5.7FilterInputStream和FilterOutputStream
装饰者模式,本身只是实现了InputStream和OutputStream的方法。
5.8BufferedInputStream和BufferedOutputStream
添加了缓冲数组(大小8k)
5.9BufferedReader和bufferedWriter
缓冲数组(8k大小的缓冲数组)
[1] https://blog.csdn.net/crave_s...
5.10DataInputStream和DataOutputStream
对原始数据类型的读写
5.11StringReader和StringWriter
String的Stream封装类。
StringReader底层是String,
read()是将String中的内容复制一份返回。
StringWriter底层是StringBuffer,
write()是将字符串拼接到StringBuffer后面。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。