——- android培训、java培训、期待与您交流! ———-
1.1 什么是IO流
IO流用来处理设备之间的数据传输。Java对数据的操作是通过流的方式。
输入流和输出流相对于内存设备(也可以理解为我们的程序)而言。
1.2 IO流的定义分类
a)按照操作类型分类:
- 字节流 (一次读入或读出是8位二进制)
- 字符流 (一次读入或读出是16位二进制)
b)按照数据流向分类:
- 输入流
- 输出流
c)按照实现功能分类:
- 节点流 (直接与数据源相连,读入或读出)
- 处理流 (在节点流的基础上,再套接一层,套接在节点流上的就是处理流)
1.2 IO流的体系
注:上图按照操作类型分类
Jdk提供的流继承了四大类:InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输入流),Writer(字符输出流)。
tip:名字中包含Reader和Writer的都是字符流;名字中包含InputStream和OutputStream的都是字节流
1.2.1 字符流和字节流的区别
字节流读取的时候,读到一个字节就返回一个字节。字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在 UTF-8码表中是 3 个字节)时。先去查指定的编码表,将查到的字符返回。
字节流可以处理所有类型数据,除文本数据外如图片,mp3,avi 。而字符流只能处理文本数据
1.2.2 流的扩展分类
名称 | 对象 |
---|---|
打印流 | PrintStream、PrintWriter |
管道流 | PipedInputStream、PipedOutputStream |
序列流 | SequenceInputStream |
对象序列化流 | ObjectInputStream、ObjectOutputStream |
说明:
打印流 :一般是打印到控制台,可以进行控制打印的地方。
管道流 :PipedInputStream的一个实例要和PipedOutputStream的一个实例共同使用,共同完成管道的读取写入操作。主要用于线程操作。
序列流 :可以将流合并,可以用于数据的切割和合并。
对象序列化流:对象序列化,把对象直接转换成二进制,写入介质中。使用对象流需要实现Serializable接口,否则会报错。
1.3 总结
只要是处理纯文本数据,就要优先考虑使用字符流。除此之外都用字节流
流对象基本上都是成对出现的,有特定的输出流就有对应该流行的出入流,根据这个规律可以方便记忆
处理流是在字节流的基础上实现的,所以使用处理流的时候在最里层需要传入字节流的对象
- -