流模式--过滤流类型
作者:互联网
过滤流模型
过滤流就是在节点流的基础上附加功能
1.过滤流
所谓的过滤流实际上就是类似上面的加密处理,在输入之后(后置处理,被装饰对象先执行)或者输出之前(前置 处理,先处理然后被装饰对象执行)进行一下额外的处理,最终实际操作是调用被装饰对象的方法完成工作,依靠 这种装饰模式实现在节点流的基础上附加额外功能.当然也允许多个过滤流嵌套从而达到功能累加的目的。
FilterInputStream实际上就是一个装饰抽象角色
//循环十三加密
public class SecurityReader extends FilterReader {
protected SecurityReader(Reader in) {
super(in);
}
public int read() throws IOException {
int c = super.read();
if (c >= 'a' && c <= 'z') {
c = (c - 'a' + 13) % 26 + 'a';
} else if (c >= 'A' && c <= 'Z') {
c = (c - 'A' + 13) % 26 + 'A';
}
return c;
}
}
2.桥接转换流
InputStreamReader和OutputStreamWriter提供了字节流和字符流之间的桥接转换功能,用于与字节数据到字符数据之间的转换,无需编程实现将字节拼接为字符 ;
转换流可以在构造时指定其编码字符集 ;
InputStreamReader用于将一个InputStream类型的输入流自动转换为Reader字符流 ;
OutputStreamWriter用于将一个Writer字符输出流转换为OutputStream字节输出流
3.InputStreamReader构造器
(1) InputStreamReader(InputStream)
(2) InputStreamReader(InputStream, String)
(3) InputStreamReader(InputStream, Charset)
(4) InputStreamReader(InputStream, CharsetDecorder)
4.缓冲流
(1)缓冲流是套接在响应的节点流之上,对续写的数据提供缓冲的功能,提高读写的效率,同时增加了一些新方法;
(2)以介质是硬盘为例,字节流和字符流的弊端:在每一次读写的时候,都会访问硬盘。 如果读写的频率比较高的时 候,其性能表现不佳。为了解决以上弊端,采用缓存流。
(3)缓存流在读取的时候,会一次性读较多的数据到缓存中,以后每一次的读取,都是在缓存中访问,直到缓存中的数 据读取完毕,再到硬盘中读取
构造方法
(1)BuàeredReader(Reader)不定义缓存大小,默认8192
(2)BuàeredReader(Reader in, int size)size为自定义缓冲区的大小
(3)BuàeredWriter(Writer)
(4)BuàeredWriter(Writer out, int size)size为自定义缓冲区的大小
(5)BuàeredInputStream(InputStream)
(6)BuàeredInputStream(InputStream in, int size)size为自定义缓冲区的大小
(7)BuàeredOutputStream(OutputStream)
(8)BuàeredOutputStream(OuputStream out, int size)size为自定义缓冲区的大小
缓冲输入流的方法
BuàedReader提供了一个方法readLine():String,但是BuàeredInputStream中并没有这个方法。
BuàeredReader提供了readLine方法用于读取一行字符串,以\r或\n分割(换行符) 。
如果读取内容为null,则表示读取到了流的末尾 ;
readLine方法会自动剔除本行内容末尾的换行符 。BuàeredWriter提供了newLine方法用于写入一个行分隔符。
对于输出的缓冲流,写入的数据会先在内存中缓存,使用Öush方法会使内存中的数据立即写出。
标签:缓存,--,模式,InputStream,Bu,int,过滤,InputStreamReader,size 来源: https://blog.csdn.net/qq_46028988/article/details/113359332