Java---字节流与字符流

来源:互联网 发布:围巾 知乎 男士 编辑:程序博客网 时间:2024/05/29 03:13

1.分类

A:字符流,字节流()

实际上主要还是字节流,只是在针对不同编码的文本文件时为了方便处理出现了字符流。一般情况下文本之外的都是用字节流。

B:节点流,处理流()

节点流即数据流的源头和目的地流;处理流相当于在节点流的源目之间横插一杠,可以用来处理已经存在的数据流。

C:输出流,输入流()

数据流是有方向的,这点很容易理解。

2.缓冲

在网上看到一些说法是:字节流没有缓冲,字符流有缓冲,并且通过代码进行了验证,我个人对于这个并不是特别的认同,但目前也没有有效的理解来推翻网上的结论。在网络上的结论的基础上,字符流可以强制使用flush进行刷新,也就是将缓冲区的数据进行输出。

我对于缓冲的理解是:这里缓冲的高效利用的关键点在于缓冲周期间隔中对数据的操作,就算是一次读取一个字节并且理解处理一个字节,这个可以极端的认为也是缓冲,只不过相对较小,操作系统具有预读功能,如果间隔中间处理时间过长很可能使得预读被下一次读取之前释放,这就造成同一块数据在一个业务逻辑中被多次读取和释放。因此我们可以想到一个方式,那就是将控制缓冲区的大小(想想一个场景:搬砖;两地相差200米,砖块数量固定;一种方式是一次拿一个砖块,直到搬完;另一种方式是用一个小车,小车一次可装100块砖,直到搬完。这就会节省大量路上所用的时间)。网上之所以说字节流没有缓冲区,我的理解是字节流流的缓冲区只有8bit,而磁盘的读取是以字节的方式,也就是说每读取一个字节,字节流的缓冲区就会填满,此时就会自动刷新,而字符流的缓冲区相对较大,因此在字节读取的机制上,读取一个字节并不能使缓冲区填满,也就不能及时刷新数据,最终导致的结果就是在没有填满或者没有主动刷新的情况下程序中是不能看到数据的输出效果。

0 0
原创粉丝点击