流的方向:输入流/输出流 操作单元:字节流/字符流 流的角色:节点流/处理流(低级流/高级流)
(节点流:直接连接数据源节点进行读写 处理流:对节点流进行封装,程序连接到已存在的流上,不会连接到数据源)
一.字节流
1.文本,图片,音频,视频都是以二进制(字节)形式存在的
2.字节流读写文件:FileInputStream/FileOutputStream。可以实现文件的拷贝
3.字节流的缓冲区:一个字节一个字节的读写,需要频繁的操作文件,效率很低。可以建一个临时缓冲区(数组)
4.字节缓冲流:BufferedInputStream/BufferedOutputStream
二.字符流
1.字符流操作文件:FileReader/FileWriter。也可以建字符流缓冲器提高效率
2.字符缓冲流:BufferedReader/BufferedWriter
三:转换流
InputStreamReader:字节输入流转换成字符输入流
OutputStreamWriter:字节输出流转换成字符输出流
四.File类
1.IO流可以对文件内容就行读写,但对文件本身进行的一些常规操作是无法通过IO流来实现的
五.RandomAccessFile
1.可以从文件任意位置开始执行读写操作
六.对象序列化
1.对象序列化:将一个java对象转换成一个IO流中字节序列的过程,使内存中的对象转换成与平台无关的二进制流
目的是为了将对象保存到磁盘上,或将java对象在网络中传输
将IO流中的字节序列恢复成java对象称为反序列化
七.NIO
1.从jdk1.4引入
2.NIO采取内存映射文件的方式来处理输入输出。使用的通道(Channel)和缓冲区(Buffer)
八.NIO.2
1.jdk7引入
2.Path接口,Paths和Files两个工具类
面试题:
1.不管是⽂件读写还是⽹络发送接收,信息的最⼩存储单元都是字节,那为什么IO流操作要分为字节流操作和字符流操作呢?
如果⾳频⽂件、图⽚等媒体⽂件⽤字节流比较好,如果涉及到字符的话使⽤字符流⽐较好。
要不然字符流将有Java 虚拟机将字节转换得到,这个过程⾮常耗时