Java IO流基础总结
前言
好久不用Java的IO流,把好多的基础知识都忘了,昨天在写一段代码,发现好多细节都忘了。那天在组织组内代码评审的时候,发现有人在乱用IO流相关的类,所以还是写篇文章,把这个知识点总结一下。
IO流类图结构
对于Java这种庞大的体系,我们要学某一块知识点,只有从整体上把握,整体上形成一个知识架构,这样才能更好的把握学习内容和学习方向。所以呢,和别的博文一样,上来就先来一张别的博客贴来的类结构图。
大家先不要被这张图中那么多的类所迷惑了;其实,从这张图来看,结构还是非常清晰的,也是非常简单的。虽然类很多,但是我们常用的也就那么几个,熟悉了整个的调用流程,我们就可以玩的很开心的。下面,我把我们常用的那几个整理出来,如下图所示:
从我们经常使用的角度来说,IO流分为字符流和字节流,下面就分别从字符流和字节流展开说明和总结。
字节流
字节流是指在传输过程中,传输数据的最基本单位是字节的流。
-
字节输入流
字节输入流的的抽象基类是InputStream
,我们最常用的子类是FileInputStream
和BufferedInputStream
这两个类。FileInputStream
被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作,如读取图片视频等;这种我们经常在读取文件时会用到。BufferedInputStream
是字节输入缓冲流,在BufferedInputStream
的使用过程中,会经常结合一些其它的流一起使用,比如我们看BufferedInputStream
的构造函数:BufferedInputStream(InputStream in)
BufferedInputStream
本质上是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的BufferedInputStream
后,当我们通过read()
读取输入流的数据时,BufferedInputStream
会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。通过BufferedInputStream
,我们可以提高字节流的读取和处理速度。 -
字节输出流
字节输出流的抽象基类是OutputStream
,我们最常用的子类是FileOutputStream
和BufferedOutputStream
这两个类。关于字节输出流这两个常用类就不细说了,和上面的字节输入流一样。
字符流
字符流是指在传输过程中,传输数据的最基本单位是字符的流。
-
字符输入流
字符输入流的抽象基类是Reader
,我们最常用的子类是BufferedReader
和FileReader
这两个类。用法不多说了。 -
字符输出流
字符输出流的抽象基类是Writer
,我们最常用的子类是BufferedWriter
和FileWriter
这两个类。用法也不多说了。
为啥用法不多说呢?因为明白了整个的类结构,接下来的使用也就是API的使用,我们在使用过程中需要重点关注一下编码的问题就OK了。
总结
一篇简单的总结,连代码示例都木有!希望对大家有那么一点点的帮助!
2019年7月28日 于内蒙古呼和浩特。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了