一、概述
库中的流代表有能力产出数据的数据源对象或者是有能力接收数据的接收端对象,我们一般把它分成输入和输出两部分:
- 继承自或派生的类都含有名为的方法,用于读取单个字节或字节数组。
- 继承自或派生的类都含有名为的方法,用于写入单个字节或字节数组。
我们通常通过叠合多个对象来提供所期望的功能,这其实是一种装饰器设计模式。
二、字节输入流
2.1 的作用
它的作用是用来表示那些从不同数据源产生输入的类,而最终结果就是通过方法获得数据源的内容,从数据源中读出的内容用或来表示:
- 字节数组
- 对象
- 文件
- 管道
- 一个由其它种类的流组成的序列,以便我们可以将它们收集合并到一个流内
- 其它数据源,如网络等
2.2 源码
是一个抽象类,所有表示字节输入的流都是继承于它,它实现了以下接口:
java输入输出流基础知识
比较关键的是前面四个方法:
-
返回输入流的下一个字节(),如果已经到达输入流的末尾,那么返回 -
尝试从输入流中读取长度的字节,存入到中,如果已经到达末尾返回,否则返回成功写入到中的字节数。 -
尝试从输入流中读取下长度的字节,如果为,那么返回,否则返回实际读入的字节数,读入的第一个字节存放在数据中,如果没有可读的,那么返回。 -
跳过,并丢弃掉个字节,其最大值为。
2.3 的具体实现类
-
它接收作为构造函数的参数,我们调用方法时,就是从数组里,读取字节。
-
已经过时,推荐使用。 -
支持提供文件名、和作为构造函数的参数,它的调用的是底层的方法。
-
通过通信管道来交换数据,如果两个线程希望进行数据的传输,那么它们一个创建管道输出流,另一个创建管道输入流,它必须要和一个相连接。
-
将多个连接在一起,一个读完后就完毕,并读下一个,它接收两个对象或者一个容纳对象的容器。
-
它和一个相关联,源数据都是来自于这个,它继承于,并且它和传入的并不是直接关联的,中间通过了进行中转,要关注的就是它的方法,它会把一个之前序列化过的对象进行反序列化,然后得到一个对象,它的目的在于将(把二进制流转换成为对象)和(从某个数据源中读出字节流)这两个操作独立开来,让它们可以随意地组合。
-
它的构造函数参数就是一个:
这个类很特殊,前面的子类都是传入一个数据源()等等,然后通过重写方法从数据源中读取数据,而则是将组合在内部,它调用去执行定义的抽象方法,也就是说它不会改变组合在内部的所对应的数据源。
另外,它还新增了一些方法,这些方法底层还是调用了方法,但是它封装了一些别的操作,比如中的,它调用连续读取了四次,然后拼成一个型返回给调用者,之所以采用组合,而不是继承,目的是将(把二进制流转换成别的格式)和(从某个数据源中读出字节流)这两个操作独立开来,让它们可以随意地组合。
三、字节输出流
3.1 的作用
决定了输出要去往的目标:
- 字节数组
- 文件
- 管道
3.2 源码
和类似,也是一个抽象类,它的子类代表了输出所要去往的目标,它的关键方法如下:
我们主要关注的是方法,前两个方法最终都是调用了抽象的方法,最终怎么写入是由子类实现的。
3.3 的具体实现类
-
在的内部,有一个可变长的数组,当我们调用方法时,就是向这个数组中写入数据,它还提供了方法,来获得当前内部数组中的内容。 -
它和上面类似,只不过写入的终点换成了所打开的文件。 -
和相关联。 -
和类似,只不过它内部组合的是一个,当调用方法时,其实是先将进行反序列化转换为,再输出到所指向的目的地。 -
- 上一篇: java基础易错
- 下一篇: 基础java能做出哪些软件
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/26253.html