IO流主要用来处理设备之间的数据传输,流的本质是数据传输。Java对于数据的操作都是通过流的方式来实现的,而Java用于操作流的对象都在IO包中
IO流的分类
Java I/O流主要包含以下几个层次,包含三个部分。在整个Java IO包中最重要的就是5个类和1个接口,5个类是指:File
、InputStream
、OutputStream
、Reader
和Writer
;一个接口是指Serializable
接口
- 流式部分——IO主体部分
- 非流式部分——主要包含一些辅助流失部分的类,如
File
- 其他类——如:与文件读取部分与安全相关的类,
SerializablePermission
类,以及与本地操作系统相关的文件系统的类,如FileSystem
类和Win32FileSystem
类
Java中字符采用的尸Unicode标准,因此一个字符代表16位,一个字节代表8位,1个字符可以用2个字节表示
字符流和字节流的区别
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:
- 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
字节流:一次读入或读出是8位二进制。通过字节的形式一个字节一个字节或者字节数组来操作文件中内容,可以操作一切文件。
- 字符流:一次读入或读出是16位二进制。通过单个字符或者是字符数组的形式来操作文件的,存在一定的局限性,是专门用于对文本文件操作的,默认的版本为GBK
设备上的数据无论是图片或者视频,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。
对文件进行操作
- FileInputStream
- FileOutputStream
- FileReader
- FileWriter
对管道进行操作
- PipedInputStream
- PipedOutputStream
- FileReader
- FileWriter
字节字符数组
- ByteArrayInputStream
- ByteArrayOutputStream
- CharArrayReader
- CharArrayWriter
Buffer缓冲流(缓冲流是用来提高输入和输出效率的。我们学习了输入和输出的字节流和字符流,但是如果读写的文件比较大,如果一个个字节或者字符来读取写入的时候,耗费的时间比较长,即使用字符或字节数组也是耗时的,这里就需要更加高效的流,来提高速度了,那就是缓冲流)
- BufferedInputStream
- BufferedOutputStream
- BufferedReader
- BufferedWriter
转化流(换换流是字节和字符沟通的桥梁,可以说是给字节流穿上一件外衣,来制定编码表的格式,实际进行操作的还是字节流。)
- InputStreamReader
- OutputStreamWriter
数据流
- DataInputStream
- DataOutputStream
打印流
- PrintStream
- PrintWriter
对象流(把封装的对象直接输出,而不是一个个转换为字符串输出)
- ObjectInputStream
- ObjectOutputStream
【注】我们每次存储到文件或者读取文件中的内容都是文本的。但是如果我们想存储对象怎么办呢?例如存储人类person(包含姓名和年龄)
对象的序列化:ObjectOutputStream(OutputStream out)通过write方法,将对象写入到文件中。
对象的反序列化:ObjectInputStream(InputStream in)通过readObject的方法,将文件中的对象读取出来。
- 序列化 (把对象直接转换为二进制,写入磁盘)
- SequenceInputStream
节点流
节点流:直接与数据源相连,读入或读出。
直接使用节点流,读写不方便,为了更快的读写文件,才有了处理流。
处理流
处理流和节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
感谢
https://www.cnblogs.com/zhaoyanjun/p/6292384.html
https://blog.youkuaiyun.com/lfh15732626246/article/details/53466339