Java OutputStream.write()输出流用法

API详解

//作为抽象类中唯一的抽象方法,(非抽象)子类必须实现这个方法。
//我们可以看到,这个类还提供了另外两个write方法,但是它们最终都是要调用这个方法来完成具体的实现
//对于一个输出流,我们需要关心输出的内容到哪里去了,从这个write方法中我们根本看不到输出的目的地,所以实现这个方法的子类必须告诉这一点
//而实现这个方法的子类,就是节点流。
//注意:作为字节输出流,为何这里参数传递为int型,而非byte型,这个在后面子类实现中再分析
public abstract void write(int b) throws IOException;

//此方法直接输出一个字节数组中的全部内容,调用了下面的write方法
public void write(byte b[]) throws IOException {
    write(b, 0, b.length);
}

//功能:要输出的内容已存储在了字节数组b[]中,但并非全部输出,只输出从数组off位置开始的len个字节。因此,需要对传入的三个参数作合理性判断
public void write(byte b[], int off, int len) throws IOException {
    //数组不能为空,否则抛出NullPointerException
    if (b == null) {
        throw new NullPointerException();
    } else if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) {
        //此处判断off+len<0是多余的
        throw new IndexOutOfBoundsException();
    } else if (len == 0) {
        return;
    }
    //最终会调用第一个write方法。注意:1.子类可能会复写当前的write方法;2.在输出的过程中,还是一个一个字节输出的。
    for (int i = 0; i < len; i++) {
        write(b[off + i]);
    }
}

例子

public static void main(String[] args) {
    OutputStream out = System.out;
    try {
        byte[] bs = "本实例使用OutputStream输出流,在控制台输出字符串\n".getBytes();
        out.write(bs); // 将字节数组的内容写入输出流
        bs = "输出内容:\n".getBytes();
        out.write(bs);
        bs = "      网站源代码,祝愿天下学子,学业有成。".getBytes();
        out.write(bs);
        out.close(); // 关闭输出流
    } catch(IOException e) {
        e.printStackTrace();
    }
}


版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。