这篇来说说字节流.
两个顶级父类
字节流有两个顶级父类:输入流InputStream与输出流OutputStream,两者均为抽象类.
InputStream
这是字节输入流的顶级父类,下面来分析一下它的源码.
构造器
没有显式地写出构造器,证明只有一个默认构造器.
方法
一共有三个read():
有一个无参的抽象方法read(),是留给子类去实现的.
public abstract int read() throws IOException;
第二个read()传入一个字节数组,是利用第三个read()实现的,这里直接看看第三read()的代码:
public int read(byte b[]) throws IOException {
return read(b, 0, b.length);
}
public int read(byte b[], int off, int len) throws IOException {
if (b == null) {
throw new NullPointerException();
//没有byte[]就抛出空指针异常.
} else if (off < 0 || len < 0 || len > b.length - off) {
throw new IndexOutOfBoundsException();
//偏移量或要读取的长度小于0,或要数组的长度减偏移量大于要读取的长度就抛出下标越界异常.
} else if (len == 0) {
return 0;
//要读取的长度为0就返回0.
}