前言

好久不用Java的IO流,把好多的基础知识都忘了,昨天在写一段代码,发现好多细节都忘了。那天在组织组内代码评审的时候,发现有人在乱用IO流相关的类,所以还是写篇文章,把这个知识点总结一下。

IO流类图结构

对于Java这种庞大的体系,我们要学某一块知识点,只有从整体上把握,整体上形成一个知识架构,这样才能更好的把握学习内容和学习方向。所以呢,和别的博文一样,上来就先来一张别的博客贴来的类结构图。

大家先不要被这张图中那么多的类所迷惑了;其实,从这张图来看,结构还是非常清晰的,也是非常简单的。虽然类很多,但是我们常用的也就那么几个,熟悉了整个的调用流程,我们就可以玩的很开心的。下面,我把我们常用的那几个整理出来,如下图所示:

从我们经常使用的角度来说,IO流分为字符流和字节流,下面就分别从字符流和字节流展开说明和总结。

字节流

字节流是指在传输过程中,传输数据的最基本单位是字节的流。

  • 字节输入流

    字节输入流的的抽象基类是InputStream,我们最常用的子类是FileInputStreamBufferedInputStream这两个类。

    FileInputStream被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作,如读取图片视频等;这种我们经常在读取文件时会用到。

    BufferedInputStream是字节输入缓冲流,在BufferedInputStream的使用过程中,会经常结合一些其它的流一起使用,比如我们看BufferedInputStream的构造函数:

    BufferedInputStream(InputStream in)

    BufferedInputStream本质上是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的BufferedInputStream后,当我们通过read()读取输入流的数据时,BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。通过BufferedInputStream,我们可以提高字节流的读取和处理速度。

  • 字节输出流

    字节输出流的抽象基类是OutputStream,我们最常用的子类是FileOutputStreamBufferedOutputStream这两个类。

    关于字节输出流这两个常用类就不细说了,和上面的字节输入流一样。

字符流

字符流是指在传输过程中,传输数据的最基本单位是字符的流。

  • 字符输入流

    字符输入流的抽象基类是Reader,我们最常用的子类是BufferedReaderFileReader这两个类。用法不多说了。

  • 字符输出流

    字符输出流的抽象基类是Writer,我们最常用的子类是BufferedWriterFileWriter这两个类。用法也不多说了。

为啥用法不多说呢?因为明白了整个的类结构,接下来的使用也就是API的使用,我们在使用过程中需要重点关注一下编码的问题就OK了。

总结

一篇简单的总结,连代码示例都木有!希望对大家有那么一点点的帮助!

2019年7月28日 于内蒙古呼和浩特。

最新文章

  1. Mysql 分区处理NULL的得方式
  2. 笔记:java转XML
  3. XML dom
  4. MR原理
  5. Zabbix3.2安装部署
  6. input上传按钮 文字修改办法
  7. android BroadcastReceiver
  8. MSSQL 之事务订单存储过程
  9. malloc(): memory corruption: 0x0000000001cc7120 ***
  10. Catalyst揭秘 Day2 Catalyst源码初探
  11. locate 不能使用
  12. tomcat异常
  13. 安装Postgresql踩过的坑
  14. HttpWebResponse Post 前端控件数据,后台如何接收?
  15. 格式代码出现两次oracle
  16. passwd: Have exhausted maximum number of retries for service【转】
  17. redis集群redis-cloud搭建
  18. 在Linux服务器上运行Jupyter notebook server教程
  19. com.alibaba.fastjson.JSONObject
  20. JavaScript创建对象的6种方式

热门文章

  1. Python flask 构建可扩展的restful ap
  2. 3、flink架构,资源和资源组
  3. 2019-2020-1 20199303《Linux内核原理与分析》第八周作业
  4. java中wait和sleep的区别
  5. 第八章服务器raid及配置实战
  6. APP路由还能这样玩
  7. 学习HTML
  8. 翻转单词顺序 VS 左旋转字符串
  9. 简单使用媒体查询@media
  10. 基于KepServer实现与S7-1200PLC之间的通信