Java8 I/O源码-Reader与Writer

字节输入流的学习告一段落了,接下来的一段时间学习字符输入流。本文学习字符输入流的抽象类Reader与和字符输出流的抽象类Writer。

Reader

Reader是字符输入流的抽象类。子类必须实现的方法只有read(char[], int, int) 和close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

下面学习下Reader.java的源码。

public abstract class Reader implements Readable, Closeable {
   

    protected Object lock;//用于同步针对此流的操作的对象。

    /**
     * 构造函数之一
     * 创建一个新的字符流Reader,其重要部分将同步其自身。
     */
    protected Reader() {
        this.lock = this;
    }

    /**
     * 构造函数之一
     * 创建一个新的字符流reader,其重要部分将同步给定的对象lock
     */
    protected Reader(Object lock) {
        if (lock == null) {
            throw new NullPointerException();
        }
        this.lock = lock;
    }

    /**
     * 试图将字符读入指定的字符缓冲区。
     * 缓冲区可照原样用作字符的存储库:所做的唯一改变是put操作的结果。不对缓冲区执行翻转或重绕操作。
     * 将输入流管道中的target.length个字节读取到指定的缓存字符数组target中、返回实际存放到target中的字符数。 
     */
    public int read(java.nio.CharBuffer target) throws IOException {
        //获取此缓冲区中的剩余元素数
        int len = target.remaining();
        char[] cbuf = new char[len];
        //试图将输入流中的len个字符读入cbuf,返回实际读取的字节数n
        int n = read(cbuf, 0, len);
        //如果实际读到字符的个数大于0
        if (n > 0)
            //将实际读取到的n个字符存入缓冲区
            target.put(cbuf, 0, n);
        //返回实际读取的字符数
        return n;
    }

    /**
     * 从输入流中读取单个字符。
     */
    public int read() throws IOException {
        char cb[] = new char[1];
        if (read(cb, 0, 1) == -1)
            return -1;
        else
            return cb[0];
    }

    /**
     * 从输入流中读取一定数量的字符并把它们保存到缓冲数组b中。返回读取的字节数。
     */
    public int
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值