字符流(一)Reader和Writer源码理解

1.Reader

1.1 继承关系

public abstract class Reader implements Readable, Closeable{}
//下面是两个接口所需要实现的类
public interface Readable {
    public int read(java.nio.CharBuffer cb) throws IOException;
}
public interface Closeable {
    public void close() throws IOException;
}

1.2 部分方法

     //两个未实现的方法
     abstract public void close() throws IOException;
     abstract public int read(char cbuf[], int off, int len) throws IOException;
    //一个对象锁,这个会在构造方法中进行赋值。
    protected Object lock;
    protected Reader() {
	this.lock = this;
    }
    //这个锁会在skip方法中出现
    synchronized (lock) {
    //这里是读操作,读多少个字符。还有判断可能文件尾
    }

1.3 锁的基本介绍

上面方法中用到的锁在使用时,使用不带锁的方法是不受影响的,只有两个方法同时带锁才会受影响.

下面是写的一个例子,了解锁起到的作用。

public static void main(String args[]) throws Exception {
	final Object w = new Object();
	Thread t = new Thread() {
		public void run() {
			try {
				System.out.println("线程开始,先休息0.01s,这样可以保证主线程的锁先启动");
				Thread.sleep(10);
				System.out.println(w+"这里可以表明使用w对象的方法的");
				System.out.println("等待主线程的同步块完成");
				synchronized (w) {
					System.out.println("进入线程同步块");
					Thread.sleep(1000);
					System.out.println("线程同步结束");
				}
				System.out.println("线程结束");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	};
	t.start();
	synchronized (w) {
		System.out.println("主线程的同步开始");
		Thread.sleep(1000);
		System.out.println("主线程的同步结束");
	}
}

//输出结果:
主线程的同步开始
线程开始,先休息0.01s,这样可以保证主线程的锁先启动
java.lang.Object@1fb8ee3这里可以表明使用w对象的方法的
等待主线程的同步块完成
主线程的同步结束
进入线程同步块
线程同步结束
线程结束 

2.Writer

2.1 继承关系

public abstract class Writer implements Appendable, Closeable, Flushable {}
public interface Appendable {
    Appendable append(CharSequence csq) throws IOException;
    Appendable append(CharSequence csq, int start, int end) throws IOException;
    Appendable append(char c) throws IOException;
}
//其他两个接口就不需要看了。

2.2 部分方法

首先是看一看append方法

    //很明显是直接写入了。
    public Writer append(CharSequence csq) throws IOException {
	if (csq == null)
	    write("null");
	else
	    write(csq.toString());
    	return this;
    }

再看看几个抽象方法

    abstract public void write(char cbuf[], int off, int len) throws IOException;

    abstract public void flush() throws IOException;

    abstract public void close() throws IOException;

2.3 与锁有关的

关于写操作的内容都会加锁。

3.结束

希望继续关注字符流的其他类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值