java io流概述及常用流解析,我不信你用的很熟

Java中I/O流概述

对于输入流和输出流的基本概念通过下面的图进行说明:

上图是一台机器通过网络读取服务端数据,此图要说明的是流的一些基本概念。在服务器端,数据存储在磁盘上,将磁盘上的数据读取到服务器内存的过程是输入流,服务器通过网络将内存中的数据输出到客户端对于服务器内存来说是输出流。

在单机客户端,通过网络读取数据到内存的过程对于客户端内存是输入流,把读取到内存中的数据写入到磁盘的的过程对于客户端内存是输出流。所以输入流输出流是针对内存来说的。对于输入流就是读取的过程(Read),而输出流就是写的过程(Write)。

根据读写数据方式的不同,流可以分为字节流和字符流。

字节流按照字节的方式读取和写出数据,读写的最小单位是字节,字节流可以读写任何数据。

字符流读写数据的最小单位是一个字符,在Java中一个字符占用两个字节。

字符流只适合读写纯文本数据,如果读取的是图片、视频和二进制文件,需要使用字节流读写。在Java中,所有的字节流都是以Stream结尾,而字符流都是以Reader和Writer结尾。

文件中的信息是由一连串的字节或字符构成的,组成文件的字节序列称为字节流,组成文件的字符序列称为字符流。在Java中根据流的方向可以分为输入流和输出流。输入流是将磁盘上的文件或其它输入设备的数据加载到内存的过程。输出流与输入流相反,是将内存中的数据保存到磁盘文件或其他输出设备。

输入和输出流图解

文件是由字符或字节构成的,如纯文本文件是字符流,二进制文件如图片、视频是字节流。那么将磁盘上的文件加载到内存或再将内存中的数据输出到文件,需要有输入和输出流的支持,那么在Java语言中又把输入流和输出流各分为了两种,字节输入流和字节输出流,字符输入流和字符输出流。

输入输出流的分类

在Java中,输入输出流主要是上图中四个抽象类及其子类组成的。

FileInputStream和其他字节输入流之间的关系

字节输入流FileInputStream是底层核心输入流,继承了InputStream抽象类,是InputStream类的核心实现。是其他字节输入流依赖的底层输入流。

FileInputStream类的构造函数:

构造函数的参数可以是File类型也可以是String类型,不管是哪种类型,代表是某个具体的文件。说明FileInputStream类直接操作的是磁盘上的文件。在操作系统中,文件有图片、视频、纯文本、二进制文件等。

BufferedInputStream类的构造函数:

缓冲字节输入流BufferedInputStream,带有缓冲字节数组,默认是8k个byte,当然可以指定缓冲区的大小。读取磁盘中的字节先缓冲到缓冲区中,当缓冲区写满后一次读取。可以注意到,缓冲字节输入流的构造函数中参数的类型是InputStream类型,这个参数只能是FileInputStream文件字节输入流的引用。通常情况下,这种类叫做包装类,不能直接操作具体的文件,只能通过FileInputStream引用对文件进行间接的读取。

ObjectInputStream类的构造函数

Java对象字节输入流ObjectInputStream 主要的作用是对之前使用Java对象字节输出流 ObjectOutputStream序列化写入到磁盘文件中的基本数据和对象进行反序列化读取。

通常情况下,对象输出流ObjectOutputStream和对象输入流ObjectInputStream分别与文件字节输出流FileOutputStream和文件字节输入流FileInputStream一起使用,可以将程序运行过程中的对象进行持久化存储到磁盘文件中。ObjectInputStream 用于恢复那些以前序列化的对象到内存。

ObjectInputStream将从字节输入流的对象反序列化后与Java虚拟机中对象对应的类型匹配。只有实现了java.io.Serializable接口的对象才能从流读取。

对象字节输入流构造函数的参数类型也是InputStream,不能直接操作底层的文件,也是一个包装类,依赖FileInputStream类。另一个无参数的构造函数主要是为了特殊需要创建的子类准备的,通常不会使用。

DataInputStream类的构造函数

DataInputStream(InputStream in)

数据字节输入流可以从底层输入流中读取基本Java数据类型,应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。

从数据字节输入流的构造函数可以看出,DataInputStream流不能直接操作底层的文件,只能通过FileInputStream对底层的文件进行读取,也是一个包装类。

通过对上面几个常用到的字节输入流类进行分析,FileInputStream类是核心的底层的可以直接操作文件的字节输入流,其他的字节输入流都依赖FileInputStream字节输入流。只有了解了FileInputStream类的读取方式,对其他的字节输入流就更容易了解了。

好了,本篇文章就分享到这里了。有兴趣的新手伙伴们可以关注收藏起来,以后需要的时候可以多看看。如果有正在学java的程序员,可来我们的java技术学习扣qun哦:59789,1510里面免费送java的视频系统教程!

猜你喜欢

转载自blog.csdn.net/weixin_43660525/article/details/85781151
今日推荐