Java-IO(1)---OutputStream详解

JavaIO(1)—OutputStream详解

IO体系

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • File类。
    包里面有一个单独的File类,这个类是文件和目录路径名的抽象表示形式。这个类里面包含了很多与文件或路径有关的方法,如:创建和删除文件或者路径,获取文件或路径的属性,判断文件或路径是否具有一些性质等。尽管输入输出设备有很多,但是操作最多的还是硬盘,而数据在硬盘上的表现形式就是文件,即File。

OutputStream及其子类:输出字节流。这个体系将数据按照字节格式写入到输出设备(硬盘或屏幕等)。
InputStream及其子类:输入字节流。这个体系读取不同输入设备(键盘,硬盘等)的字节数据源。
Writer及其子类:输出字符流。这个体系将数据按照字符格式写入到输出设备(硬盘或屏幕等)。
Reader及其子类:输入字符流。这个体系将数据按照字符格式写入到输出设备(硬盘或屏幕等)。

  • IO中的“装饰者模式”

本文先讲OutputStream字节输出流体系,上面是这个体系的继承关系图。其中1,2,3,4是OutputStream的直接子类,他们分别实现了父类的write()等方法,而且写的形式和目的地各不相同,用来完成不同的任务。还有一个直接子类FilterOutputStream,它及其子类5,6,7就构成了“装饰者模式”,比如子类5:BufferedOutputStream,它可以接受1,2,3,4等直接子类,完成特定任务的同时,使用了缓冲区,提高了效率。

源码分析

File类的使用很简单,不再赘述。本文说一下OutputStream字节输出流及其子类的部分源码,以及“装饰者模式”的应用。

OutputStream类源码
package java.io;

// OutputStream是所有字节输出流的超类,并实现2个接口,这两个接口种分别有一个方法close()和flush()
public abstract class OutputStream implements Closeable, Flushable {
    /* 
    将指定字节写入此文件输出流,子类需实现该方法。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。
    */
    public abstract void write(int b) throws IOException;

    // 将 b.length 个字节从指定 byte 数组写入此文件输出流中。 
    public void write(byte b[]) throws IOException {
        write(b, 0, b.length);
    }

    // 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
    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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值