二.2 java高级-IO

流的方向:输入流/输出流    操作单元:字节流/字符流    流的角色:节点流/处理流(低级流/高级流)

(节点流:直接连接数据源节点进行读写  处理流:对节点流进行封装,程序连接到已存在的流上,不会连接到数据源)

一.字节流

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 虚拟机将字节转换得到,这个过程⾮常耗时 




原文地址:https://www.cnblogs.com/midiyu/p/15123091.html