`

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)退化形式

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

 

分享到:
评论

相关推荐

    JAVA IO流技术

    输出流:程序到目的地(OutPutStream、Writer写出去) 处理数据单元: 字节流:按照字节读取数据(InputStream、OutputStream) 字符流:按照字符读取数据(Reader、Writer) 功能不同: 节点流:可以直接从数据源或...

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

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

    Java之IO流学习总结

    4.字符输入流Reader 在上面的继承关系图中可以看出: Reader 是所有的输入字符流的父类,它是一个抽象类。 CharReader、StringReader 是两种基本的介质流,它们分别将Char 数组、String中读取数据。PipedReader 是...

    java IO流读写

    InputStream和OutputStream 1.DataInputStream,... BufferedReader,BufferedWriter 从Reader/Writer里读取基本类型的数据 2.BufferedInputStream,BufferedOutputStream 封装了从缓冲区读写指定数量数据的方法

    基础深化和提高-IO流技术学习大全

    另外,Java还提供了一些高级的流类,如缓冲流、对象流、数据流等,它们在底层字节流和字符流的基础上提供了更多的功能和便利。 除了基本的文件和网络I/O之外,Java的NIO(New I/O)技术也是I/O流领域的重要发展。...

    java高级特性 - io流.docx

    它提供了一种灵活的方式来读取和写入数据,可以用于文件操作、网络通信、数据流处理等各种场景。Java 中的 I/O 流主要分为字节流和字符流两种类型。 字节流(Byte Streams): 字节流以字节为单位进行读写操作,...

    2018版 04747 Java语言程序设计(一)七八九十章知识点总结

    输入数据流只能读不能写;而输出数据流只能写不能读。 * 从数据流中读取数据时,必须有一个数据源与该数据流相连(FileInputStream in = new FileInputStream(“javatest.txt”);) 二、Java.io 包中提供了表示...

    Java中IO流知识点总结

     读取流是从输入设备或数据对象中读取数据到程序,用程序进行处理读入的数据,写出流是把程序处理的数据输出到  输出设备上比如硬盘和控制台。  字节流读取和写入的数据单位是字节,可以读取和写入任何类型的...

    io.c:c 的 io 抽象

    未来:将数据传入和传出不同来源、流抽象等例子# include " io/io.h "int written;io_writer *writer = file_io_writer( " test.txt " , " wb " );io_write (writer, ( void *)msg, size, &written);io_writer_...

    java IO流学习笔记——(1)文件字节流

    • 输入流:数据源到程序(InputStream、Reader读进来) • 输出流:程序到目的地(OutputStream、Writer写出去) 流分类 : • 节点流:可以直接从数据源或目的地读写数据 • 处理流(包装流):不直接连接到数据源或目的...

    Java中的IO流(二)字符流的常用操作

    今天带来的是JAVA的IO流中的字符流,Reader和Writer子类流的用法。 基础概念 流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作...

    day019-io笔记和代码.rar

    3. IO流工具类的抽取,将所有的关流(字节流和字符流)方法抽取出来,优化代码 4. 字符流:(重点) * 使用场景:使用于处理文本相关的文件 * * Reader 抽象类: * |子类 * ...

    java IO章节的总结

    以上能够直接对数据进行读和写的流叫节点流,但是直接用这些来操作是比较麻烦的,而且一个字节一个字节的对文件处理,对硬盘的读取和存入对硬盘的损伤是很大的,因此需要对这些节点流进行包装,即外套一些处理流来...

    Java 中IO流分为哪几种? BIO、NIO、AIO有什么区别?

    Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来...

    java7源码-JavaIO:JavaIO

    java.io.Reader java.io.Writer 4. FileInputStream和FileOutputStream是什么? 这是在拷贝文件操作的时候,经常用的两个类。在处理小文件的时候,它们的性能还不错,在大文件是最好使用BufferedInputStream(或...

    redis:纯 Go 语言的 Redis 客户端库,具有流、发布-订阅、流水线和池化功能

    这个包操作数据流(io.Reader)。 根据需要,包将在客户端读取数据之前在本地缓存数据,例如在使用每个元素的内容之前读取数组的连续元素时。 用法 输入命令 type Cmd struct { io. Writer } Cmd 是当前正在写入...

    JDK_API_1_6

    FilterInputStream FilterInputStream 包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。 FilterOutputStream 此类是过滤输出流的所有类的超类。 FilterReader 用于读取...

    JAVA_API1.6文档(中文)

    java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供...

    JAVA基础知识点,J2SE部分内容

    抽象父类是 Reader 和 Writer 3-3.对象流 流的命名很有规律,一般是数据源加上流的名字,如:文件读取流就是FileInputStream,对象流就是ObjectInputStream。 需要注意的是字节流和字符流的区别 3-4..字节流可...

    【后端】java基础(5.7)java高级基础之IO与异常处理

    前面讲了那么多,都是对java数据的操作,本章来讲讲对文件的操作——IO流。 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据...

Global site tag (gtag.js) - Google Analytics