Java中的I/O是什么?

IO的分类

  • 根据流的流向,可以将流分为输入流(InputStream)和输出流(OutputStream)。输入流负责从外部读取数据到程序中,而输出流负责将程序中的数据输出到外部。

  • 根据操作单元,可以将流分为字节流(Byte Stream)和字符流(Character Stream)。字节流按字节读写数据,常用于处理二进制数据;字符流按字符读写数据,常用于处理文本数据,内部会根据指定的字符编码进行转换。

  • 根据流的角色,可以将流分为节点流(Node Stream)和处理流(FilterStream)。节点流是直接与数据源或目标进行连接的流,例如FileInputstream 和 File0utputstream 是直接连接文件的节点流。处理流是通过包装其他流来提供额外功能的流,例如BufferedInputstream和Bufferedoutputstream是增加了缓冲功能的处理流,它们可以提高读写的效

I/O 这里的I和O指的是输入与输出

  • 输入:Input 用来读取数据的

  • 输出:Output 用来写出数据的

流的概念

java将输入输出比喻为"流",英文:Stream

字节流(节点流/低级流)

超类

java.io.InputStream是所有字节输入流的超类,里面定义了所有字节输入流都必须具备的读取字节的方法

java.io.OutputStream是所有字节输出流的超类,里面定义了所有字节输出流都必须具备的写出字节的方法

文件流

文件流是用来链接我们的程序与文件之间的"管道",用来读写文件数据的流。

文件流分为

  • 文件输入流java.io.FileInputStream:读取文件数据的流

  • 文件输出流java.io.FileOutputStream:写入文件数据的流

  • 文件流是继承自InputStream和OutputStream

处理流/高级流

java将IO分为了两类

  • 节点流:又称为"低级流"(节点流是字节流中的一种)

    • 特点:直接链接程序与另一端的"管道",是真实读写数据的流

    • IO一定是建立在节点流的基础上进行的。

    • 文件流就是典型的节点流(低级流)

  • 处理流:又称为"高级流"

    • 特点:不能独立存在,必须链接在其他流上

    • 目的:当数据经过当前高级流时可以对数据进行某种加工操作,来简化我们的同等操作

    • 实际开发中我们经常"串联"一组高级流最终到某个低级流上,使读写数据以流水线式的加工处理完成。这一操作也被称为使"流的链接"。流链接也是JAVA IO的精髓所在。

缓冲流

java.io.BufferedInputStreamBufferedOutputStream

功能

在流链接中的作用:加快读写效率

通常缓冲是最终链接在低级流上的流

对象流

java.io.ObjectInputStreamObjectOutputStream

作用
  • 对象输出流:将我们的java对象进行序列化

  • 对象输入流:将java对象进行反序列化

序列化

将一个对象转换为一组可被传输或保存的字节。这组字节中除了包含对象本身的数据外,还会包含结构信息。

序列化的意义

实际开发中,我们通常会将对象

  • 写入磁盘,进行长久保存

  • 在网络间两台计算机中的java间进行传输

无论是保存在磁盘中还是传输,都需要将对象转换为字节后才可以进行。

字符流

  • java将流按照读写单位划分为字节流与字符流.

  • java.io.InputStream和OutputStream是所有字节流的超类

  • 而java.io.Reader和Writer则是所有字符流的超类,它们和字节流的超类是平级关系.

  • Reader和Writer是两个抽象类,里面规定了所有字符流都必须具备的读写字符的相关方法.

  • 字符流最小读写单位为字符(char),但是底层实际还是读写字节,只是字符与字节的转换工作由字符流完成.

  • 字符流都是高级流

转换流

转换流

java.io.InputStreamReader和OutputStreamWriter是常用的字符流的实现类。

实际开发中我们不会直接操作他们,但是他们在流连接中是必不可少的一环。

流连接中的作用
  • 衔接字节流与其他字符流

  • 将字符与字节相互转换

按照功能可以分为 处理流(高级流)和节点流(低级流)

按照传输数据可以分为 字节流 字符流

我们需要字节流(低级流)来作为应用程序和文件传输的桥梁 字符流(高级流中的一种)中的转换流来进行字符字节的转换 用高级流来进行对数据进行加工

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值