任何java应用程序都要和IO打交道,对IO有一个清新的了解是java程序员最基本的要求,本文主要介绍java.io的设计原理、接口、以及常用的输入输出类。在讲java.io的设计原理之前,先介绍一点与设计模式相关的知识。
Decorator模式
《设计模式》中对Decorator模式的意图是这样描述的:“动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式比生成子类更为灵活[1]。”Decorator模式的工作原理是:“可以创建始于Decorator对象(负责新功能的对象)终于原对象的一个“链”。”
图1:Decorator模式的通用结构图
图1就是Decorator模式的UML图,它通过给对象添加装饰来动态的添加新的功能:
- Component为组件和装饰的公共父类,它定义了子类必须实现的方法。
- ConcreteComponent是一个具体的组件类,可以通过给它添加装饰来增加新的功能。
- Decorator是所有装饰的公共父类,它定义了所有装饰必须实现的方法,同时,它还保存了一个对于Component的引用,以便将用户的请求转发给Component,并可能在转发请求前后执行一些附加的动作。
- ConcreteDecoratorA和ConcreteDecoratorB是具体的装饰,可以使用它们来装饰具体的Component.
JDK5.0中60多个IO流类组成了四大家族:InputStream,OutputStream,Reader,Writer。
- InputStream/OutputStream是对字节序列进行操作的抽象类。
- Reader/Writer是基于Unicode代码单元进行操作的抽象类。
- 输入-输出对称性,比如InputStream和OutputStream各自占据Byte流的输入与输出的两个平行的等级结构的根部。而Reader和Writer各自占据Char流的输入与输出的两个平行的等级结构的根部。
- byte-char对称,InputStream和Reader的子类分别负责Byte和Char流的输入;OutputStream和Writer的子类分别负责Byte和Char流的输出,它们分别形成平行的等级结构。
以InputStream来看看它的设计原理,首先看看其UML类图:
图2:InputStream的UML类图
java因为其令人迷惑的多种流输入及相关的类而令人头疼。在Decorator模式的背景下,我们来重新认识一下其输入类:
- InputStream——具有读入功能的抽象被装饰器。
- AudioInputStream, ByteArrayInputStream, FileInputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream——具有读入功能的具体被装饰器。
- FilterInputStream ——具备装饰器的抽象意义,所有的装饰器都直接或间接地派生自FilterInputStream。
- BufferedInputStream,DataInputStream,LineNumberInputStream,PushbackInputStream——具有具体功能的装饰器。
理解了Decorator模式就可以解释为什么Java要求这些对象一个封装在另一个里面——这使程序员能够从可获得的不同的行为中选取任意数量的组合。同理,可解释Output、Writer、Reader。
参考资料:
1.《设计模式解析》第二版:P212~P220
2.
JAVA IO 设计模式彻底分析
3.
java.io与装饰者模式
- 大小: 17.9 KB
- 大小: 38.9 KB
分享到:
相关推荐
Java输入输出流是Java编程中一个非常重要的概念,主要用于数据的读取和写入操作,包括文本文件和二进制文件。在实验9中,主要目的是理解和掌握I/O流的分类,以及如何进行文本和二进制文件的读写。 I/O流在Java中被...
Java中的输入输出流是程序与外部数据交互的重要方式,它允许我们读取和写入数据到各种来源,如键盘、文件、网络等。在Java中,输入输出流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。本次实验...
Java输入输出处理是Java编程中的一个关键领域,它涉及到程序与外部世界的数据交换,包括读取数据、写入数据以及管理内存和磁盘之间的数据流动。在Java中,输入输出通常通过流(Stream)的概念来实现,流是数据的双向...
### Java输入输出流与文件处理 #### 重要概念与基础知识 **输入输出流与文件处理**在编程领域占据着核心地位,特别是在Java中,通过`java.io`包提供了丰富的类和接口来支持输入输出操作。这包括从键盘读取用户输入...
Java 输入输出语句整理总结 Java 输入输出语句是 Java 编程语言中最基本也是最重要的部分之一。输入输出语句是指程序与外部世界交互的桥梁,通过输入输出语句,程序可以从外部世界获取数据,并将处理结果输出到外部...
【Java输入输出流详解】 Java输入输出流(Input/Output Stream)是Java平台核心API的重要组成部分,主要用于处理数据的输入和输出。Java的I/O机制是基于流的,即数据以流的形式从一个地方传输到另一个地方。Java的I...
Java 输入输出流练习 本练习旨在通过对 Java 输入输出流的实践掌握,提高学生对 Java 编程语言的理解和应用能力。通过这个实验,学生将学习如何使用 Java 语言进行文件输入输出操作,掌握 ObjectInputStream 和 ...
根据提供的文件信息,我们可以总结出以下关于Java中的输入输出处理的知识点: ### 1. Java标准输入输出 #### 1.1 标准输入输出概述 - 在Java中,标准输入输出是通过`java.lang.System`类实现的,其中`System.in`...
Java 实现输入输出 Java 是一种广泛使用的编程语言,它提供了多种方式来实现输入输出操作。输入输出操作是 Java 编程的基本组成部分,任何一个 Java 程序都需要与用户进行交互,或者与外部系统进行通讯。 Java 提供...
这篇文档主要涵盖了Java输入输出流的基本概念、数据流分类、标准数据流、Java.io包中的数据流和文件类以及文件操作类的方法。 1. 数据流的概念: 流是一种数据处理的概念,分为输入流和输出流。在Java中,流可以...
### Java输入输出流详解 #### 一、Java IO 概述 在计算机程序设计中,输入输出(Input/Output,简称IO)是非常重要的一个概念。它涉及到程序如何与外部世界进行数据交换,最常见的外部设备包括磁盘存储和网络通信等...
Java 输入输出流是Java编程语言中用于处理数据输入和输出的核心机制。在Java中,输入输出流被设计成一种抽象的概念,允许程序处理各种不同类型的输入源和输出目标,包括文件、网络连接、内存缓冲等。Java.io 包提供...
总结来说,Java的输入输出机制是通过流的概念实现数据的读写,涵盖从简单的标准输入输出到复杂的文件操作和网络通信。理解这些基本组件和它们之间的关系对于编写高效、健壮的Java程序至关重要。在实际编程中,开发者...
### Java中的标准输入输出流知识点详解 #### 一、Java标准I/O介绍 Java提供了丰富的I/O处理机制,包括标准输入输出流、字节流、字符流等多种方式来处理数据的读取和写入。标准输入输出流是Java中非常基础且重要的...
有关Java输入输出流的总结有关Java输入输出流的总结有关Java输入输出流的总结
基于Java文件输入输出流实现文件上传下载功能 本文将详细介绍基于Java文件输入输出流实现文件上传下载功能的相关知识点,包括文件上传和下载的实现原理、Java文件输入输出流的基础操作、Servlet的使用等。 文件...
总结来说,Java的输入输出流系统是一个强大且灵活的框架,通过不同的流类型组合,可以满足各种复杂的数据传输需求。理解和熟练掌握这一系统对于Java开发者来说至关重要,因为它不仅是进行文件操作的基础,也是实现...
Java输入输出和泛型编程 一、Java 输入输出 Java 输入输出是指在 Java 程序中读取和写入数据的过程。Java 提供了多种输入输出方式,包括从控制台读取输入、从文件读取输入、从网络读取输入等。同时,Java 也提供了...
### Java 输入输出流及文件读写详解 #### I/O 类体系结构 在Java开发中,输入输出(I/O)操作是非常重要的部分,特别是在处理文件、网络通信等方面。Java的I/O类体系主要位于`java.io`包中,此外还有一些新实现的I...