Java8 I/O源码-OutputStream

上篇文章Java8 I/O源码-InputStream介绍了所有表示字节输入流的类的父类IntputStream,本文简单介绍所有表示字节输出流的类的父类OutputStream。

OutputStream是抽象类。这个抽象类是所有表示字节输出流的类的父类。输出流接受输出字节并将这些字节发送到某个“池”。继承这个抽象类的类必须提供至少一种可写入一个输出字节的方法。定义如下:

public abstract class OutputStream implements Closeable, Flushable

OutputStream实现了Flushable接口。Flushable是可刷新数据的目标地,其中声明了flush方法。flush方法通过将所有已缓冲输出写入底层流来刷新此流。

方法

方法说明
public abstract void write(int b) throws IOException;将指定的字节写入此输出流。
public void write(byte b[]) throws IOException {…}将b.length个字节从指定的byte数组写入此输出流。
public void write(byte b[], int off, int len) throws IOException {…}将指定byte数组中从偏移量off开始的len个字节写入此输出流。
public void flush() throws IOException {}刷新此输出流并强制写出所有缓冲的输出字节。
public void close() throws IOException {}关闭此输出流并释放与此流有关的所有系统资源。
write( int b)
/**
 * 将指定字节写入此输出流。 
 * write方法的常规协定是:向输出流写入一个字节。要写入的字节是参数b 的八个低位。b的24个高位将被忽略。
 * OutputStream的子类必须提供此方法的实现。
 *
 * @param      b   字节
 * @exception  IOException  如果发生I/O错误。尤其是如果已关闭输出流。
 */
public abstract void write(int b) throws IOException;
write( byte b[])
/**
 * 将 b.length 个字节从指定的 byte 数组写入此输出流。
 * write(b) 的常规协定是:应该与调用write(b, 0, b.length) 的效果完全相同。
 *
 * @param      b   数据.
 * @exception  IOException  如果发生I/O错误。
 * @see        java.io.OutputStream#write(byte[], int, int)
 */
public void write(byte b[]) throws IOException {
    write(b, 0, b.length);
}
write( byte b[], int off, int len)
/**
 * 将指定byte数组中从偏移量off开始的len个字节写入此输出流。
 * 
 * write(b, off, len) 的常规协定是:
 * 将数组b中的某些字节按顺序写入输出流;
 * 元素b[off]是此操作写入的第一个字节,b[off+len-1]是此操作写入的最后一个字节。
 * 
 * OutputStream 的write方法对每个要写出的字节调用一个参数的write 方法。
 * 建议子类重写此方法并提供更有效的实现。
 *
 * @param      b     数据。
 * @param      off   数据中的初始偏移量。
 * @param      len   写入的字节数。
 * @exception  IOException   如果发生I/O错误。尤其是关闭了输出流。
 */
public void write(byte b[], int off, int len) throws IOException {
    //检查参数是否合法
    if (b == null) {
        throw new NullPointerException();
    } else if ((off < 0) || (off > b.length) || (len < 0) ||
               ((off + len) > b.length) || ((off + len) < 0)) {
        throw new IndexOutOfBoundsException();
    } else if (len == 0) {
        return;
    }
    // 将指定byte数组中从偏移量off开始的len个字节写入此输出流。
    for (int i = 0 ; i < len ; i++) {
        write(b[off + i]);
    }
}
flush()
/**
 * 刷新此输出流并强制写出所有缓冲的输出字节。
 * 
 * flush 的常规协定是:
 * 如果此输出流的实现已经缓冲了以前写入的任何字节,则调用此方法指示
 * 应将这些字节立即写入它们预期的目标。
 * 
 * 如果此流的预期目标是由基础操作系统提供的一个抽象(如一个文件),
 * 则刷新此流只能保证将以前写入到流的字节传递给操作系统进行写入,
 * 但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。
 * 
 * OutputStream 的flush方法不执行任何操作。
 *
 * @exception  IOException  如果发生I/O错误。
 */
public void flush() throws IOException {
}
close()
/**
 * 关闭此输出流并释放与此流有关的所有系统资源。 
 * 
 * close 的常规协定是:
 * 该方法将关闭输出流。
 * 关闭的流不能执行输出操作,也不能重新打开。
 * 
 * OutputStream 的close方法不执行任何操作。
 * 
 * @exception  IOException  如果发生I/O错误。
 */
public void close() throws IOException {
}

总结

  • 表示字节输出流的类必须提供至少一种可写入一个输出字节的方法。

对InputStream的介绍就到这里。想了解更多内容请参考

版权声明
作者:潘威威

原文地址:CSDN博客-潘威威的博客-http://blog.csdn.net/panweiwei1994/article/details/78145143

本文版权归作者所有,欢迎转载,但转载时请在文章明显位置给出原文作者名字(潘威威)及原文链接。请勿将本文用于任何商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值