Java中的IO流之间的关系以及流的体系

IO流

相信很多小伙伴学到 IO 流就被各种类型的流看花了眼,这里我也是做了一些自己在学习过程中遇到的问题和总结,希望能够帮助到大家

流的分类
  • 按操作数据单位不同可分为:字节流(8 bit),字符流(16 bit)
  • 按数据流的流向不同分为:输入流,输出流
  • 按流的角色不同分为:节点流,处理流
什么是输入流和输出流呢?(节点流、处理流)

类似于水流的概念,举个通俗易懂的栗子,就好比水库、我们家里的水和污水之间的关系。对于程序和文件而言,我们通常站在程序的角度看待来区分输入和输出。从文件中读取数据就是向程序中输入数据,我们称为输入流,就像从水库把水运到我们家里一样,而输出流恰好相反,就是从程序中向文件中写入数据。这样我们称为输出流。那么是什么节点流和处理流呢?对于节点流而言,就相当于直接从水库看把水运送到我们家里,中途是不经过任何处理的,也就是说直接从文件中读取数据送到程序中,这样的流我们称之为节点流,而处理流就是作用在已有的流的基础上的,这样的我们称之为处理流,可以理解为水库得水经过了净化池之后到我们家里

要注意的是对于Java中的一般情况下,我们看它的父类都是通过后缀来看的,比方说,FileInputStream,后缀是InputStream类型的,也就是字节输入流,同理InputStreamReader,后缀是Reader类型,所以是字符输入流。Java中的IO流共涉及40多个类,实际上都是非常规则的,都是从以下四个抽象基类派生的

(抽象基类)字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
那么,了解了基本的流之间的关系后,我们该怎么选择使用哪一种流呢

通常对于文本文档的输入和输出我们经常使用字符流,因为字符是char定义的类似于’a’或者’b’这样的,而我们文本文档中的内容也是这样的字符构成的,所以使用字符流比较合适,而且字符流通常不会引起汉字的乱码(由于各种编码格式中汉字所占的字节不同,使用字节流的时候可能会出现把一个汉字分几瓣的情况)。那么什么时候该使用字节流呢?我们知道,对于字节流而言,是八位的二进制编码,对于不能直接读取字符输入或输出的内容我们使用字节流,比如说,我们需要加载图片或者视频,这样的情况我们使用字符流显然是不合适的,因为图片和视频的底层实际上是01的二进制编码

IO流体系

下面是我总结的一些流的相关信息,重点的流我用斜体加粗标记出来了

分类字节输入流字节输出流字符输入流字符输出流
抽象基类InputStreamOutputStreamReaderWriter
访问文件FileInputStreamFileOutputStreamFileReaderFileWriter
访问数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderChayArrayWriter
访问管道PipedInputStreamPipedOutputStreamPipedReaderPipedWriter
访问字符串StringReaderStringWriter
缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter
转换流InputStreamReaderOutputSreamWriter
对象流ObjectInputSreamObjectOutputStream
FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
打印流PrintStreamPrintWriter
推回输入流PushbackInputStreamPushbackReader
特殊流DataInputStreamDataOutputStream

好了,这就是我今天为大家带来的全部内容了,这些都是一些基本的流之间的关系,想要灵活的使用这些流还需要勤加练习,多写代码,由于流的中类实在太多了,我就不在这里对流进行一一介绍了,以后有机会我还会写出来根据具体的代码来解释相关知识的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值