`

IO数据流的读和写,Reader和Writer的功能扩展

阅读更多

今天学习的内容还是IO数据流的读和写,Reader和Writer的功能扩展,每天看书区别InputStream和OutputStream字节型类的扩展和应用,然后今天学会了字节型数据自动转换字符型数据,BufferedInputStream(new InputStream(new FileWrite("res/1.txt"))),这是三个不同类的嵌套,刚自己仿造老师上课写的类做的总结。今天的课程听的很清晰,明天继续加油!课程总结如下:

 

Reader

|--InputStreamReader

|--FileReader:专门用于处理文件的字符读取流对象。

Writer

|--OutputStreamWriter

|--FileWriter:专门用于处理文件的字符写入流对象。

 

Reader中的常见的方法:

1,int read():读取一个字符。返回的是读到的那个字符。如果读到流的末尾,返回-1.

2,int read(char[]):将读到的字符存入指定的数组中,返回的是读到的字符个数,

也就是往数组里装的元素的个数。如果读到流的末尾,返回-1.

3,close():读取字符其实用的是window系统的功能,就希望使用完毕后,进行资源的释放。

Writer中的常见的方法:

1,write(ch): 将一个字符写入到流中。

2,write(char[]): 将一个字符数组写入到流中。

3,write(String): 将一个字符串写入到流中。

4,flush():刷新流,将流中的数据刷新到目的地中,流还存在。

5,close():关闭资源:先关闭前会先调用flush,刷新流中的数据去目的地。然流关闭。

字符流的缓冲区:

缓冲区的出现提高了对流的操作效率。

原理:其实就是将数组进行封装。

BufferedWriter、BufferedReader

读取缓冲区对象。

 

BufferedReaderbufr = new BufferedReader(new FileReader("buf.txt"));

Stringline = null;

//按照行的形式取出数据。取出的每一个行数据不包含回车符。

while((line=bufr.readLine())!=null){

System.out.println(line);

}

bufr.close();

装饰设计模式

(1)模式功能

装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象增加功能,相当于是改变了对象的外观。当装饰过后,从外部使用系统的角度看,就不再是使用原始的那个对象了,而是使用被一系列的装饰器装饰过后的对象。

这样就能够灵活的改变一个对象的功能,只要动态组合的装饰器发生了改变,那么最终所得到的对象的功能也就发生了改变。

变相的还得到了另外一个好处,那就是装饰器功能的复用,可以给一个对象多次增加同一个装饰器,也可以用同一个装饰器装饰不同的对象。

 

(2)对象组合

前面已经讲到了,一个类的功能的扩展方式,可以是继承,也可以是功能更强大、更灵活的对象组合的方式。

其实,现在在面向对象设计中,有一条很基本的规则就是“尽量使用对象组合,而不是对象继承”来扩展和复用功能。装饰模式的思考起点就是这个规则,可能有些朋友还不太熟悉什么是“对象组合”,下面介绍一下“对象组合”。

什么是对象组合

(3)装饰器

装饰器实现了对被装饰对象的某些装饰功能,可以在装饰器里面调用被装饰对象的功能,获取相应的值,这其实是一种递归调用。

在装饰器里不仅仅是可以给被装饰对象增加功能,还可以根据需要选择是否调用被装饰对象的功能,如果不调用被装饰对象的功能,那就变成完全重新实现了,相当于动态修改了被装饰对象的功能。

另外一点,各个装饰器之间最好是完全独立的功能,不要有依赖,这样在进行装饰组合的时候,才没有先后顺序的限制,也就是先装饰谁和后装饰谁都应该是一样的,否则会大大降低装饰器组合的灵活性。

 

 

(4)装饰器和组件类的关系

装饰器是用来装饰组件的,装饰器一定要实现和组件类一致的接口,保证它们是同一个类型,并具有同一个外观,这样组合完成的装饰才能够递归的调用下去。

组件类是不知道装饰器的存在的,装饰器给组件添加功能是一种透明的包装,组件类毫不知情。需要改变的是外部使用组件类的地方,现在需要使用包装后的类,接口是一样的,但是具体的实现类发生了改变。

 

(5)退化形式

如果仅仅只是想要添加一个功能,就没有必要再设计装饰器的抽象类了,直接在装饰器里面实现跟组件一样的接口,然后实现相应的装饰功能就可以了。但是建议最好还是设计上装饰器的抽象类,这样有利于程序的扩展。

 

分享到:
评论

相关推荐

    IO数据流 全攻略

    面向字符的流是专为处理字符数据设计的,如`Reader`和`Writer`是所有字符流的抽象基类,它们提供了读写字符的API。字符流特别适用于处理文本文件,因为它们能够处理不同字符编码,如UTF-8,ASCII等,确保字符数据的...

    Java IO流 reader和writer的方法使用

    本文将深入探讨Java IO流中的`Reader`和`Writer`类及其常用方法,并通过具体的代码示例来展示这些方法的实际应用。 #### 一、Reader类及其方法 `java.io.Reader`是所有字符输入流的超类,用于读取文本。它的具体...

    io流写入和读取

    在IT行业中,输入/输出(IO)流是处理数据传输的核心机制,特别是在Java等编程语言中。"io流写入和读取"这个主题...通过理解和熟练运用这些知识点,开发者能够有效地管理程序中的数据流,确保数据的安全性和高效性。

    Go语言中io.Reader和io.Writer的详解与实现

    在Go语言中,`io.Reader`和`io.Writer`是两个非常基础且重要的接口,用于处理输入输出(I/O)操作。它们定义在`io`包中,是构建其他复杂I/O操作的基础。 `io.Reader`接口定义了一个单个方法: ```go type Reader ...

    一文读懂Java IO流 1. IO流基础概念 1.1 什么是IO流 1.2 IO流的分类 1.2.1 按数据传输单位分类 1.2.2 按功能角色分类 1.3 Java IO流体系结构 1.4 流的基

    一文读懂Java IO流 1. IO流基础概念 1.1 什么是IO流 1.2 IO流的分类 1.2.1 按数据传输单位分类 1.2.2 按功能角色分类 1.3 Java IO流体系结构 1.4 流的基本操作 2. 字节流 2.1 InputStream - 输入字节流 2.2 ...

    IO流 javaio java 流

    它们又可以进一步细分为输入流(InputStream/Reader)和输出流(OutputStream/Writer),分别用于数据的读取和写入。 1. 字节流: - 字节输入流(InputStream):如FileInputStream,用于从文件系统读取字节数据。...

    Go-带有进度和剩余时间估计的io.Reader和io.Writer

    总之,Go语言中的`io.Reader`和`io.Writer`接口是构建各种输入输出操作的基础,结合进度和剩余时间估计,可以为数据传输提供更强大的功能和更好的用户体验。在开发过程中,合理利用这些工具和技巧,能够提升程序的...

    ZGG2016#knowledgesystem#IO流07:Writer、Reader练习1

    IO流05:Writer、Reader练习* 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中* 数据源:* 目的地:public cl

    IO流pdf宝典

    ### JAVA IO流概念及其应用详解 ...通过对以上知识点的学习,我们可以了解到JAVA IO流在处理文件和其他设备上的数据时的强大功能。掌握好这些基本概念和技巧,能够帮助开发者更好地处理各种数据操作需求。

    java流IO总结

    在Java中,数据流通常指的是数据的传输过程,它包括输入流和输出流。 - **输入流**:从外部数据源读取数据到程序中。 - **输出流**:将程序中的数据发送到外部数据源。 #### 三、数据流的特性 - **有序性**:数据...

    IO流宝典.pdf

    字节流包括输入流(InputStream)和输出流(OutputStream),字符流包括Reader和Writer。这些基本流类是所有其他IO流类的基础。 输入流用于将数据从源(如硬盘、网络、内存等)读取到程序中,输出流则负责将数据从...

    IO流的主要流

    - **字符流基类**:Reader和Writer是所有字符输入流和输出流的抽象基类,用于处理字符数据。 - **字符转换流**:InputStreamReader和OutputStreamWriter作为桥梁,用于在字节流和字符流之间进行转换,它们可以根据...

    Java_IO流详解

    这两个数据流又可以分为许多子类来完成 IO 功能。 Java 1.1 版本正式加入了 Reader 和 Writer 两个类,支持 Java IO 的国际化标准,并通过国际化字符编码(Unicode)将文本存储起来。 Reader 类类似于 ...

    JavaIO流详解归纳.pdf

    Reader/Writer 流是对 Input/Output 流的扩展,提供了字符流的功能。 Java 的 IO 模型设计非常优秀,它使用Decorator 模式,用户可以动态装配不同功能的 Stream,以便获得需要的功能。例如,需要一个具有缓冲的文件...

    java.io.Reader 和 java.io.InputStream 的区别

    `java.io.Reader`和`java.io.InputStream`是Java标准库中处理输入数据的核心类,它们分别针对字符流和字节流提供了基础的支持。 #### `java.io.Reader`:字符流的读取器 `java.io.Reader`是所有字符输入流的超类。...

    Java基础篇:IO流.pdf

    本知识点将深入探讨Java IO流的相关细节,包括节点流与处理流的概念,以及文件流、标准输入输出流、缓冲流、转换流、打印流、数据流和对象流的处理过程和使用方法。 首先,Java中的IO流根据数据流向可以分为输入流...

    java之io流实例

    通过熟练掌握IO流,开发者能够有效地处理数据输入输出,实现文件操作、网络通信等功能,从而提高程序的灵活性和可扩展性。在实际编程中,不仅要理解各类流的基本概念,还要学会灵活运用,才能充分发挥Java IO流的...

    android 数据IO流实例

    7. **Reader** 和 **Writer** 接口,以及它们的子类(如BufferedReader和BufferedWriter):这些类用于处理字符流,提供诸如读取一行、读取整行、写入字符串等功能。 在实际应用中,我们通常会结合使用这些类来实现...

    JAVA IO流技术

    在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流负责从数据源(如文件、网络、内存等)读取数据,而输出流则负责将数据写入目的地。 1. 数据源(Data Source):...

    io流详解,字符流和字节流代码

    8. **数据流**: - **DataInputStream/DataOutputStream**:用于读写基本数据类型和字符串,如int、float等。 9. **打印流**: - **PrintStream/PrintWriter**:提供了方便的打印方法,可以输出各种数据类型,并...

Global site tag (gtag.js) - Google Analytics