今天学习的内容还是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系统的功能,就希望使用完毕后,进行资源的释放。
1,write(ch): 将一个字符写入到流中。
2,write(char[]): 将一个字符数组写入到流中。
3,write(String): 将一个字符串写入到流中。
4,flush():刷新流,将流中的数据刷新到目的地中,流还存在。
5,close():关闭资源:先关闭前会先调用flush,刷新流中的数据去目的地。然流关闭。
缓冲区的出现提高了对流的操作效率。
原理:其实就是将数组进行封装。
读取缓冲区对象。
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)退化形式
如果仅仅只是想要添加一个功能,就没有必要再设计装饰器的抽象类了,直接在装饰器里面实现跟组件一样的接口,然后实现相应的装饰功能就可以了。但是建议最好还是设计上装饰器的抽象类,这样有利于程序的扩展。
分享到:
相关推荐
面向字符的流是专为处理字符数据设计的,如`Reader`和`Writer`是所有字符流的抽象基类,它们提供了读写字符的API。字符流特别适用于处理文本文件,因为它们能够处理不同字符编码,如UTF-8,ASCII等,确保字符数据的...
本文将深入探讨Java IO流中的`Reader`和`Writer`类及其常用方法,并通过具体的代码示例来展示这些方法的实际应用。 #### 一、Reader类及其方法 `java.io.Reader`是所有字符输入流的超类,用于读取文本。它的具体...
在IT行业中,输入/输出(IO)流是处理数据传输的核心机制,特别是在Java等编程语言中。"io流写入和读取"这个主题...通过理解和熟练运用这些知识点,开发者能够有效地管理程序中的数据流,确保数据的安全性和高效性。
在Go语言中,`io.Reader`和`io.Writer`是两个非常基础且重要的接口,用于处理输入输出(I/O)操作。它们定义在`io`包中,是构建其他复杂I/O操作的基础。 `io.Reader`接口定义了一个单个方法: ```go type Reader ...
它们又可以进一步细分为输入流(InputStream/Reader)和输出流(OutputStream/Writer),分别用于数据的读取和写入。 1. 字节流: - 字节输入流(InputStream):如FileInputStream,用于从文件系统读取字节数据。...
总之,Go语言中的`io.Reader`和`io.Writer`接口是构建各种输入输出操作的基础,结合进度和剩余时间估计,可以为数据传输提供更强大的功能和更好的用户体验。在开发过程中,合理利用这些工具和技巧,能够提升程序的...
IO流05:Writer、Reader练习* 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中* 数据源:* 目的地:public cl
### JAVA IO流概念及其应用详解 ...通过对以上知识点的学习,我们可以了解到JAVA IO流在处理文件和其他设备上的数据时的强大功能。掌握好这些基本概念和技巧,能够帮助开发者更好地处理各种数据操作需求。
在Java中,数据流通常指的是数据的传输过程,它包括输入流和输出流。 - **输入流**:从外部数据源读取数据到程序中。 - **输出流**:将程序中的数据发送到外部数据源。 #### 三、数据流的特性 - **有序性**:数据...
字节流包括输入流(InputStream)和输出流(OutputStream),字符流包括Reader和Writer。这些基本流类是所有其他IO流类的基础。 输入流用于将数据从源(如硬盘、网络、内存等)读取到程序中,输出流则负责将数据从...
- **字符流基类**:Reader和Writer是所有字符输入流和输出流的抽象基类,用于处理字符数据。 - **字符转换流**:InputStreamReader和OutputStreamWriter作为桥梁,用于在字节流和字符流之间进行转换,它们可以根据...
这两个数据流又可以分为许多子类来完成 IO 功能。 Java 1.1 版本正式加入了 Reader 和 Writer 两个类,支持 Java IO 的国际化标准,并通过国际化字符编码(Unicode)将文本存储起来。 Reader 类类似于 ...
Reader/Writer 流是对 Input/Output 流的扩展,提供了字符流的功能。 Java 的 IO 模型设计非常优秀,它使用Decorator 模式,用户可以动态装配不同功能的 Stream,以便获得需要的功能。例如,需要一个具有缓冲的文件...
`java.io.Reader`和`java.io.InputStream`是Java标准库中处理输入数据的核心类,它们分别针对字符流和字节流提供了基础的支持。 #### `java.io.Reader`:字符流的读取器 `java.io.Reader`是所有字符输入流的超类。...
本知识点将深入探讨Java IO流的相关细节,包括节点流与处理流的概念,以及文件流、标准输入输出流、缓冲流、转换流、打印流、数据流和对象流的处理过程和使用方法。 首先,Java中的IO流根据数据流向可以分为输入流...
通过熟练掌握IO流,开发者能够有效地处理数据输入输出,实现文件操作、网络通信等功能,从而提高程序的灵活性和可扩展性。在实际编程中,不仅要理解各类流的基本概念,还要学会灵活运用,才能充分发挥Java IO流的...
7. **Reader** 和 **Writer** 接口,以及它们的子类(如BufferedReader和BufferedWriter):这些类用于处理字符流,提供诸如读取一行、读取整行、写入字符串等功能。 在实际应用中,我们通常会结合使用这些类来实现...
在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流负责从数据源(如文件、网络、内存等)读取数据,而输出流则负责将数据写入目的地。 1. 数据源(Data Source):...
8. **数据流**: - **DataInputStream/DataOutputStream**:用于读写基本数据类型和字符串,如int、float等。 9. **打印流**: - **PrintStream/PrintWriter**:提供了方便的打印方法,可以输出各种数据类型,并...
### Java IO 数据流详解 #### 一、Java 文件操作基础 在Java中,进行文件操作主要依赖于`java.io.File`类。通过该类提供的方法,我们可以实现对文件和目录的基本管理,例如创建、删除、重命名文件或目录等。 **...