【J2SE快速进阶】——IO流简介


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/43762149

IO流的概念

IO流是从数据从一处流向另一处的抽象,就像水流从管道的一端流向另一端一样。在程序中,所有的数据都是以流的方式来传输和保存的。

JDK所提供的所有流类位于java.io包中,并且这些类都分别继承自以下四种抽象流类:InputStream、OutputStream、Reader和Writer。

说明:

InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。 OutputStream:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。 Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。 Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。

IO流的分类

★ 按流向来分类,IO流的可以分为输入流输出流。一般情况,数据的输入、输出都是从程序的角度来考虑的,所以输入流就是程序从文件读取数据,即数据由文件流向程序;输出流就是使数据由程序流向文件。

★按传输单位来分类,IO流可以分为字节流字符流。顾名思义,字节流是以字节为基本单位来传输数据,字符流是以占用2个字节的Unicode字符为基本单位来传输数据。说到这里,顺便回忆一下基础知识:1Byte(字节)=8bit(位),因为Java中的字符采用Unicode编码,所以每个字符占两个字节,Java中各基本数据类型所占存储空间为:

类型

占用存储空间

char

2字节

byte

1 字节

short

2字节

int

4字节

long

8字节

float

4 字节

double

8 字节

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

当了解了按流向传输单位这两种分类方式时,可以综合上文的那张思维导图来看:

Reader和InputStream都属于输入流,它们的子类负责从数据源读取数据;Writer和OutputStream都属于输出流,它们的子类负责将数据写入到指定的位置。

Reader和Writer都属于字符流,它们的子类都以字符为基本单位传输数据;InputStream和OutputStream都属于字节流,它们的子类都以字节为基本单位传输数据。

★还可以根据 IO流的功能来分类,分为节点流处理流。节点流从或向一个特定的节点读写数据;处理流是对已经存在的一个流的连接和封装,可以看做是对已经存在的流的优化或过滤。

下面就展开思维导图,来看一下java中庞大的IO家族:

这里先是对java中IO机制有一个全局的了解,后面将对这四个抽象类及其子类进一步学习与总结。

优质内容筛选与推荐>>
1、express
2、用了接近一天的程序看懂了堆排序,堆排序的“筛选”的前提条件是一个大(小)顶堆,只有堆顶的元素不是有序的。这样从堆顶开始的排序才是筛选。而堆排序就是反复筛选的程序。
3、JS内置对象(Date和RegExp)
4、WUSTOJ 1237: 将八进制的字符串转换成等价的十进制字符串(Java)
5、论文中用到的Word操作


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号