Java_io体系之FilterWriter、FilterReader简介、走进源码及示例——15

Java_io体系之FilterWriter、FilterReader简介、走进源码及示例——15


一:FilterWriter


1、类功能简介:


        字符过滤输出流、与FilterOutputStream功能一样、只是简单重写了父类的方法、目的是为所有装饰类提供标准和基本的方法、要求子类必须实现核心方法、和拥有自己的特色。这里FilterWriter没有子类、可能其意义只是提供一个接口、留着以后的扩展。。。本身是一个抽象类、如同Writer一样、所以这里只是简单介绍一下字段方法、源码、没有示例。


2、FilterWriter  API简介:


        A:关键字


	protected Writer out;		传入的底层字符输出流

        B:构造方法


	protected FilterWriter(Writer out)		使用传入的底层输出流构造FilterWriter

        C:一般方法


	void close()	关闭此流
	
	void flush()	flush此流
	
	writer(int c)	将一个字符写入到底层字符输出流out中
	
	void write(char cbuf[], int off, int len)	将一个字符数组的一部分写入out中
	
	void write(String str, int off, int len)	将一个字符串的一部分写入到out中

3、源码分析


package com.chy.io.original.code;

import java.io.IOException;


/**
 * 本身是一个抽象类、只是对弗雷Writer中的方法进行了简单的重写、提供装饰类所具有的基本方法、
 */

public abstract class FilterWriter extends Writer {

    /** 底层字符输出流*/
    protected Writer out;

    /** 使用传入的底层字符输出流创建FilterWriter*/
    protected FilterWriter(Writer out) {
		super(out);
		this.out = out;
    }

    /** 将一个字符写入到out中*/
    public void write(int c) throws IOException {
    	out.write(c);
    }

    /** 将一个字符数组的一部分写入到out中*/
    public void write(char cbuf[], int off, int len) throws IOException {
    	out.write(cbuf, off, len);
    }

    /** 将一个字符串的一部分写入到out中*/
    public void write(String str, int off, int len) throws IOException {
    	out.write(str, off, len);
    }

    /** flush此流*/
    public void flush() throws IOException {
    	out.flush();
    }
    /** 关闭此流*/
    public void close() throws IOException {
    	out.close();
    }
}

二:FilterReader


1、类功能简介:


         字符过滤输入流、本事是一个抽象类、为所有装饰类提供一个标准、只是简单重写了父类Reader的所有方法、要求子类必须重写核心方法、和提供具有自己特色的方法、这里没有像字节流那样有很多的子类来实现不同的功能、可能是因为字符流本来就是字节流的一种装饰、所以在这里没有必要再对其进行装饰、只是提供一个扩展的接口而已。。。同样也没有示例。


2、FilterReader  API简介:


        A:关键字


	protected Reader in;	底层字符输入流

        B:构造方法


	protected FilterReader(Reader in)	使用传入的底层字符输入流创建FilterReader

        C:一般方法


	void close();	关闭此流
	
	boolean markSupport()		检测此流是否支持mark
	
	void mark()		标记此流
	
	void reset()	重置最后一次mark的位置
	
	int read()		读取一个字符
	
	int read(char[] b, int off, int len)	将字符读取到字符数组b中
	
	boolean ready();	检测此流是否可以读取
	
	long skip(long n)	跳过底层输入流中的n个字符

3、源码分析


package com.chy.io.original.code;

import java.io.IOException;


/**
 * 本身是一个抽象类、只简单重写了父类Reader的一些方法、作用是为所有装饰类提供一个标准、
 * 子类要重写父类的核心方法和扩展具有自己特色的方法、目前没有子类、作用是为以后的扩展提供一个接口
 */

public abstract class FilterReader extends Reader {

    /**底层字符输入流*/
    protected Reader in;

    /** 使用传入的底层字符输入流创建FilterReader*/
    protected FilterReader(Reader in) {
		super(in);
		this.in = in;
    }

    /**读取一个字符*/
    public int read() throws IOException {
    	return in.read();
    }

    /**将字符读取到字符数组cbuf中*/
    public int read(char cbuf[], int off, int len) throws IOException {
    	return in.read(cbuf, off, len);
    }

    /**跳过底层输入流中的n个字符*/
    public long skip(long n) throws IOException {
    	return in.skip(n);
    }

    /**检测此流是否可以读取 */
    public boolean ready() throws IOException {
    	return in.ready();
    }

    /**检测此流是否支持mark*/
    public boolean markSupported() {
    	return in.markSupported();
    }

    /**标记此流*/
    public void mark(int readAheadLimit) throws IOException {
    	in.mark(readAheadLimit);
    }

    /**重置最后一次mark的位置 */
    public void reset() throws IOException {
    	in.reset();
    }
    /**关闭此流 */
    public void close() throws IOException {
    	in.close();
    }

}

总结:


         在字节流中、我们知道有很多具有特殊功能的类都是FilterInputStream和FilterOutputStream这两个类中的子类、他们都具有各自的特色、比如DataInputStream、DataOutputStream、BufferedInputStream、BufferedOutputStream、PrintStream等、但是在字符流中他们的设计却不是作为Filterxxx的子类来实现、而是直接作为Writer、Reader的子类出现、至于为什么这样设计、不知道、、可能是对字符的操作比较简单、统一、没有像字节那样有许多地方要做特色处理、当然这样说并不是意味着字符流强大、相反还是字节流比较强大、字符流能完成的字节流都能完成、而反过来就不成立了。对于为什么不再深究、以后有用到的地方再来补充。


更多IO内容:java_io 体系之目录


微信扫码订阅
UP更新不错过~
关注
  • 6
    点赞
  • 3
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

huaying.chen

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值