Java IO(1)--框架

本文详细介绍了Java中的IO流概念及分类,包括字节流与字符流的区别,输入流与输出流的不同,以及各种流的具体应用如文件读写、缓冲处理等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在IO类库中,常使用“流”这个概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象。“流”屏蔽了实际的IO设备中处理数据的细节。
1>按照“流”的数据流向,可以将其划分为:输入流与输出流。
2>按照“流”中处理数据的单位,可以将其区分为:字节流和字符流。在java中,字节是一个Byte,即8位,而字符是2个Byte,即16位。而且Java的字节是有符号类型,而字符是无符号类型。

一、以字节为单位的输入流的框架图

image
从上图可以看出:
(1)InputStream是以字节为单位的输入流的超类。InputStream提供了read()接口从输入流中读取字节数据。
(2)ByteArrayInputStream是字节数组输入流。它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;也就是说,它的内部缓冲区就是一个字节数组,即通过字节数组来实现的。
(3)PipedInputStream 是管道输入流,它和PipedOutputStream一起使用,能实现多线程间的管道通信。
(4)FilterInputStream是过滤输入流,它是DataInputStream和BufferedInputStream的超类。
(5)DataInputStream是数据输入流。它是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型”。
(6)BufferedInputStream是缓冲输入流,它的作用是为另一个输入流添加缓冲功能。
(7)File是文件和目录路径名抽象表示形式。
(8)FileDescriptor是“文件描述符”。它可以被用来表示开放文件、开放套接字等。
(9)FileInputStream是文件输入流,它通常用于对文件进行读取操作。
(10)ObjectInputStream是对象输入流。它和ObjectOutputStream一起,用来提供对基本数据或对象的持久存储。

二、以字节为单位的输出流的框架图

image
以字节为单位的输出流的公共父类是OutputStream。
(1)OutputStream是以字节为单位的输出流的超类。OutputStream提供了write()接口从输出流中读取字节数据。
(2)ByteArrayOutputStream是字节数组输出流。写入ByteArrayOutputStream的数据被写入一个Byte数组。缓冲区会随着数据的不断写入而自动增长。可使用toByteArray()和toString()获取数据。
(3)PipedOutputStream是管道输入流,它和PipedInputStream一起使用,能实现多线程间的管道通信。
(4)FilterOutputStream是过滤输出流,它是
DataOutputStream,BufferedOutputStream和PrintStream的超类。
(5)DataOutputStream是数据输出流。它是用来装饰其它输出流,它“允许应用程序以与机器无关方式向底层写入基本 Java 数据类型”。
(6)BufferedOutputStream是缓冲输出流。它的作用是为另一个输出流添加缓冲功能。
(7)PrintStream是打印输出流。它是用来装饰其它输出流,能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
(8)FileOutputStream是文件输出流。它通常用于向文件进行写入操作。
(9)ObjectOutputStream是对象输出流。它和ObjectInputStream一起,用来提供对“基本数据或对象”的持久存储。

三、以字节为单位的输入流和输出流关联的框架图

image

四、以字符为单位的输入流的框架图

image

以字符为单位的输入流的公共父类是Reader
(1)Reader是以字符为单位的输入流的超类,它提供了read()接口来取字符数据。
(2)CharArrayReader是字符数组输入流,它用于读取字符数组,它继承于Reader,操作的数据是以字符为单位。
(3)PipedReader是字符类型的管道输入流,它和PipedWriter一起是可以通过管道进行线程间的通讯,在使用管道通信时,必须将PipedWriter和PipedReader配套使用。
(4) FilterReader是字符类型的过滤输入流。
(5)BufferedReader是字符缓冲输入流,它的作用是为另一个输入流添加缓冲功能。
(6)InputStreamReader是字节转字符的输入流,它是字节流向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符。
(7)FileReader是字符类型的文件输入流。它通常用于对文件进行读取操作。

五、以字符为单位的输出流的框架图

image
以字符为单位的输出流的公共父类是Writer
(1)Writer是以字符为单位的输出流的超类,它提供了write()接口往其中写入数据。
(2)CharArrayWriter是字符数组输出流,它用于读取字符数组,它继承于Writer。操作的数据是以字符为单位。
(3)PipedWriter是字符类型的管道输出流,它和PipedReader一起是可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedWriter和PipedReader配套使用。
(4)FilterWriter是字符类型的过滤输出流。
(5)BufferedWriter是字符缓冲输出流。它的作用是为另一个输出添加缓冲功能。
(6)OutputStreamWriter是字节转字符的输出流,它是字节流通向字符流的桥梁;它使用指定的charset将字节转换为字符并写入。
(7)FileWriter是字符类型的文件输出流。它通常用于对文件进行读取操作。
(8)PrintWriter是字符类型的打印输出流。它是用来装饰其它输出流,能为其它输出流添加了功能,使它们能够方便的打印各种数据值表示形式。
六、以字符为单位的输入流和输出流关联的框架图

image

七、字节转换为字符流的框架图

image
(1)FileReader继承于InputStreamReader,而InputStreamReader依赖于InputStream。具体体现在InputStreamReader的构造函数是以InputStream为参数,我们传入InputStream,在InputStreamReader内部通过转码,将字节转换成字符。
(2)FileWriter继承于OutputStreamWriter,而OutputStreamWriter依赖于OutputStream。具体体现在OutputStreamWriter的构造函数是以OutputStream为参数,我们传入OutputStream,在OutputStreamWriter内部通过转码,将字节转换成字符。

八、字节和字符的输入流的对应关系

image

九、字节和字符的输出流对应关系

image

由上面的分析可以知道,主要是以字节为代表的InputStream和OutputStream,以字符为代表的Reader和Writer。

文章只是作为自己的学习笔记,借鉴了网上的许多案例,如果觉得阔以的话,希望多交流,在此谢过…

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值