JavaIO学习

2 篇文章 0 订阅
本文澄清了关于IO流的常见误解,强调了数据源与流之间的区别,并详细介绍了Java中的各种IO流类库,包括标准输入输出、文件操作、网络数据流等。同时,文章还深入探讨了节点流与过滤流的概念,以及InputStream、OutputStream、Reader和Writer这四个顶层抽象流类的作用。
摘要由CSDN通过智能技术生成

很多网上和个人对IO流的讲解让我有了错误的认识,这里我说下我自己的看法!

首先,就是一定要明确流和数据源的区别,这是在开始学习流的时候很容易被误导的地方!往往容易异想天开的把两者混为一谈!

数据源就是数据源,是数据的本源,是数据实体。而流仅仅是一个嫁接在这个本源上的管道,一个从外界获取或者向外界发送数据的通道而已,它本身并不是数据,这一点很容易被误导。

而根据用途的不同,java提供了一下几种IO流类库:

a)标准输入输出

b) 文件的操作

c)网络上的数据流

d)字符串的流

e)对象流

f) zip文件流

至于别的分类这里不做过多赘述,网上有很多详解。但是,有一种分类非常重要,如下:

节点流: 用于直接操作目标设备的流

过滤流: 是对一个已存在的流链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。

节点流是IO操作的根本,其余都只是对节点流的功能的扩展而已。

四大基类

InputStream是表示字节输入流的所有类的超类,需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法,数据单位都是字节(8位)

OutputStream表示输出字节流的所有类的超类,输出流接受输出字节并将这些字节发送到某个接收器,数据单位都是字节(8位)

Reader用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。数据单位都是字符(16位)

Writer写入 字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。数据单位都是字符(16位)

注意的是,这四个顶层类没有实现Serializable接口。
java.io.Serializable虽然属于IO框架,但其并不是直接作用于IO框架四个顶层IO类及其子类,而是作用于其它对象使其可被序列化再通过IO类对其进行输入输出。如:File、ObjectStreamClass、String。


JDK所提供的所有流类位于java.io包中,都分别继承自以上四种抽象流类


JDK的I/O包中主要使用到了两种设计模式:Adatper(适配器)模式和Decorator(装饰器)模式


装饰模式的角色

-抽象构件角色(component):给出一个抽象接口,以规范准备接受附加责任的对象

-具体构件角色(concrete component):定义一个将要接受附加责任的类

-装饰角色(decorator):持有一个构件(component)对象的引用,并定义一个与抽象构件接口一致的接口。

- 具体装饰角色(concrete decorator):负责给构件对象“贴上”附加的责任

装饰模式中装饰类拥有被装饰类的引用,然后装饰类还实现了和被装饰类一样的接口,所以具有和被装饰类一样的方法,在这个装饰类的方法中可以直接调用被装饰类的相同方法,并且在该方法中可以任意扩展该方法,这样就达到了扩展被装饰类的功能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漫路求索

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值