IO可算是jdk的一个很基本的东西了,所以打算整理一下我对IO的学习和理解。
IO,当然就是Input和Output的简写,分别代表了读和写两个方面。
流的引入,使我们可以形象的认为数据就像流水一般在各种是被间流走,而不必理会沟渠是怎么铺设的。我们只要关注怎么控制这些字节或者字符的流动就好了。
InputStream & OutputStream
这两个类代表了字节流的输入和输出。他们是两颗大树的树根,就像一对夫妻一样,下面都有一群子孙。查看附图。
装饰模式 Decorator design pattern
在深入了解这些子类之前,得先了解一下装饰模式,jdk就是采用这种模式来设计这些子类的。装饰模式其实是解决组合问题的。举个例子,当你设计一种字体的时候,你可能需要为它设置颜色,大小,字体类型,动画特效等等。如果让你为每一种成型的样子设计一个类来表示,或者设计一个模板来生产,那可以说有无数种组合,你几乎是做不到的。那么我可以做到的就是设计几种装饰类,可以利用这些类来人任意的组合来为文字添加效果,这样就可以满足各种需求了。
回到对象设计上来说,就是动态的为对象添加新的功能和职责,期望他能在原来的基础上完成更多的或者更好的完成工作。这里关键就是一个动态的。因为通过继承你也可以为一个类扩展新的功能,但那时固定的。通过装饰模式可以对对象进行动态的包装,怎么包装用户使用的时候按需进行。你只要提供包装来就好了。
Java IO正是有这种多种特征相组合的需求。所以也就采用了这种设计模式。
那么怎么才能实现这种模式呢?
装饰器可以被看成是一种代理,当你要执行一个类的方法的时候,可以委托给这个类的装饰器去做,并且他会为你干点别的事情。所以装饰器得持有被装饰的对象引用,以调用他干最基本的事情,同时,还要在要提供附加功能的方法上添加点东西,以达到装饰的效果。
当然装饰器也可以提供更多的方法以满足更多的需要,但都得围绕被装饰的对象来扩展。
毕竟一种装饰器可能仅提供某一方面的装饰和增强,因此需要更多种装饰器来满足不同的需要。这些装饰器之间又可以相互装饰已达到组合出拳的效果。
既然如此,得有一个基类装饰器,来包含被装饰对象的所有方法和特性,别的装饰器都继承他,这样每个装饰器都只扩展自己想要扩展的方法,其他的就不必重写。不然,你要在所有的装饰器里面都得重写很多不需要修改的方法。
FilterInputStream & FilterOutputStream正是为此目的而设计,所有的装饰类都继承于这个抽象类。
FilterInputStream & FilterOutputStream
FilterInputStream & FilterOutputStream分别继承于InputStream & OutputStream。并且提供了装饰器接口用来装饰被装饰对象。
BufferedInputStream & BufferedOutputStream
不论你要读写的IO设备是什么,你总是需要缓存读写内容。想想看,为什么呢?一提到缓存基本都是为了解决瓶颈问题的,为了提高性能。相比内存的速度来说,IO设备就太慢了。所以就需要缓存来解决,把你要写的内容缓存起来,等待一个时机,就一次flush出去,完成批量的写。
Reader & Writer
从jdk1.1开始来了一对新夫妇。这两个类代表了字符流的输入和输出。下面也有一群子孙(查看附图)。其实,这个家族的出现最主要的原因是为了国际化。也就是解决多语言的问题。因为InputStream&OutputStream主要处理8位字节的问题,不能很好的处理16位的unicode。unicode就是用来解决国际化问题的,这个家族支持unicode。
既然是这样,那么基本上这个家族都有和InputStream&OutputStream对应的子类,除了一些特殊的必须基于字节的子类。
更新中...
- 大小: 122 KB
- 大小: 135.7 KB
分享到:
相关推荐
Java IO流是Java编程语言中处理输入...通过深入学习和理解IO流,开发者可以更好地掌握数据的读取、写入和传输,提升程序的效率和功能。同时,熟悉相关工具和配置文件的使用也能帮助开发者在实际项目中更加得心应手。
在本文中,我们将深入探讨Java IO流的各个方面,包括它的分类、工作原理、常见类以及实际应用。 一、IO流的分类 Java IO流分为两大类:字节流和字符流。字节流处理的是单个8位的字节,而字符流处理的是16位Unicode...
《Java IO.chm》是一个关于Java输入/输出(IO)技术的压缩文件,其中包含了丰富的资料,适合开发者深入理解和学习Java IO系统。这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、...
这个“javaIO学习课件”提供了非常详尽的教程,旨在帮助初学者和有经验的开发者深入理解Java I/O系统的工作原理和应用。 首先,我们来看一下IO_1.pdf,它可能涵盖了基础的I/O流概念。在Java中,I/O流被分为字节流和...
在“JavaIODemo”这个示例中,可能会包含以上提到的一些或全部Java IO操作的代码实例,通过这些实例,我们可以学习如何在实际项目中应用Java IO API。实践是掌握Java IO的最佳方式,通过对这些示例的分析和运行,...
例如,javaio.bmp和javaio2.bmp可能是两张展示IO框架图的图片,其中详细描绘了不同类之间的继承关系和使用场景,帮助开发者更好地理解和掌握Java IO系统。 总结一下,Java IO框架是Java平台不可或缺的一部分,它为...
Java IO流是Java平台中的重要组成部分,用于处理输入和输出操作。它允许程序与外部设备如硬盘、网络、内存等进行数据传输...通过深入学习和实践,开发者可以有效地管理和控制程序的数据流动,从而实现各种复杂的功能。
Java IO(Input/Output)是Java编程中非常重要的一个领域,它主要用于...这个"Java io的基本操作很全面的代码"项目无疑是学习和实践Java IO的宝贵资源,可以帮助开发者深入理解和熟练运用Java IO机制,提升开发效率。
在提供的压缩包文件"Io基础文档"中,可能包含了关于这些概念的详细说明、示例代码和实战指导,对于深入理解和掌握Java IO操作非常有帮助。学习和理解这些内容,将有助于开发者在处理数据输入输出时编写出高效、稳定...
首先,让我们深入了解Java IO。Java IO库是Java最初版本的一部分,提供了一系列类和接口来处理数据输入和输出。它基于流的概念,流是数据的单向流动序列,可以是字节流或字符流。Java IO包括了文件I/O、套接字通信、...
在提供的链接中,你可能会找到关于这些概念的源代码实现,这将有助于深入理解Java IO流的工作原理和用法。通过学习和分析这些源代码,你可以更好地掌握Java的输入输出机制,并能更有效地处理各种IO操作。
在这个“java io 系列操作代码练习”中,我们可以深入理解并掌握Java IO的核心概念和实际应用。 一、Java IO体系结构 Java IO体系主要包括字节流(Byte Stream)和字符流(Character Stream),以及缓冲流...
本文将深入讲解Java IO的基本概念、常用类和实际应用。 首先,理解IO的概念至关重要。IO(Input/Output)是计算机系统中负责数据传输的部分,Java中的IO机制允许程序与外部世界进行数据交换。Java的IO库基于流...