快捷搜索:

Java.io的设计理念

Java号称供给了强大年夜的io节制,恩,实际上也确凿挺强大年夜的。然则,面对着那么多的io类,开始的时刻会有些头晕。

Java为了应用只管即便少的类供给只管即便强大年夜的io功能,在io设计的时刻采纳了Decorator也便是中文中的装饰模式。装饰模式是在不必改变原类文件和应用承袭的环境下,动态的扩展一个工具的功能。它是经由过程创建一个包装工具,也便是装饰来包裹真实的工具。没学过设计模式没紧要,从名称上就能感知1,2了。简单来说,便是包装,外挂,以使其除了本身的基础功能使外同时可以具有一些客户必要的特定功能。基础功能由本体Component实现。包装,外挂由Decorator来实现。下面是Decorator的UML图。

看不懂也没有关系,有一个对照简单的示意图。

Decorator1

Decorator2

Component

便是一层一层的包装,照样对照轻易理解的吧?好了,先记着上面这个对照轻易理解的图例吧。接下来我们先给Java的io归归类。

Java的io里面最根基的是InputStream,OutputStream,Reader,Writer,此中Stream读取的是单字节,它将数据读取到byte[]里面,它读取的是字符对应的acsii码。Reader,Writer读取的是双字节,它读取的是实际的字符,它可以设定采取什么编码来进行读写,它供给了readLine()措施。

好了,根基的两大年夜阵营出来了,读取ascii码的Stream与读取实际字符的XXXer.

然后是一些前缀,常用的有Buffered,File,那么前缀后缀连接起来,这个io类的功能就出来了。BufferedInputStream便是供给缓冲功能支持的读取ascii码的类,FileInputStream便是从文件读取ascii码的类,那么谁是实体,谁是装饰,很显着。

我们头脑里要有一个最根基的观点,便是总要有一个什么类来认真跟详细的标准输入输出(比如文件,比如节制台)打交道,实现这个最基础的跟便准输入输出打交道的类便是Component,再此之上,我们必要的功能就要斟酌是否有对应的Decorator协助实现,比如缓冲功能。然后,就很简单了。

BufferedInputStream bis = new BufferedInputStream(new FileInputStream());

一层一层的包装,包装若干层随便你,我们要做的便是确认我要跟文件打交道,那么FileInputStream是最基础的,必要被包装的,其他必要的功能,去查找那种种实现了这个功能,然后包装一下就OK了。

别的还有一个工作是我们必要知道的。Stream跟XXXer两大年夜阵营,他们各自供给各自的功能,然则他们可能必要沟通,这里Java的io供给了StreamXXXer类,比如

new InputStreamReader(System.in);这样就可以直接从节制台读取字符或者输入行内容了。

您可能还会对下面的文章感兴趣: