介绍
java.io.InputStream
public abstract class InputStream implements Closeable
FilterInputStream
是典型的装饰器设计模式,很多子类继承这个类,提供额外的功能protected volatile InputStream in; protected FilterInputStream(InputStream in) { this.in = in; }
- 装饰模式参考 20230419 6. 装饰模式 - 衣服搭配
- 从构造器可以看出到底是组件还是装饰器,如果包含入参是
InputStream
的构造器,那这个实现就是一个装饰器- FileInputStream 是组件
- BufferedInputStream 是装饰器
API
构造器
- InputStream()
public
-
read
abstract int read() throws IOException;
- 从数据中读入一个字节,并返回该字节。这个 read 方法在碰到输入流的结尾时返回 -1
- 唯一的抽象方法
int read(byte b[]) throws IOException
- 读入一个字节数组,并返回实际读入的字节数,或者在碰到输入流的结尾时返回 -1 。这个 read 方法最多读入 b.length 个字节
int read(byte b[], int off, int len) throws IOException
- 读入一个字节数组,并返回实际读入的字节数,或者在碰到输入流的结尾时返回 -1 。
b
:数据读入的数组off
:第一个读入字节应该被放置的位置在 b 中的偏移量len
:读入字节的最大数量
- 读入一个字节数组,并返回实际读入的字节数,或者在碰到输入流的结尾时返回 -1 。
-
available
- 返回在不阻塞的情况下可获取的字节数(阻塞意味着当前线程将失去它对资源的占用)
-
readNBytes
byte[] readNBytes(int len) throws IOException
- 如果未阻塞(read),则读入由 len 指定数量的字节,或者阻塞至所有的值都被读入
int readNBytes(byte[] b, int off, int len) throws IOException
- 读入的值将置于 b 从 off 开始的位置。返回实际读入的字节数,或者在碰到输入流的结尾时返回 -1
-
readAllBytes
- 产生一个数组,包含可以从当前流中读入的所有字节
- 调用 readNBytes
-
skip
- 在输入流中跳过 n 个字节,返回实际跳过的字节数(如果碰到输入流的结尾,则可能小于 n)
-
skipNBytes
-
markSupported
- 如果这个流支持打标记, 返回 true
-
mark
- 在输入流的当前位置打一个标记(并非所有的流都支持这个特性)。 如果从输入流中已经读入的字节多于 readlimit 个, 这个流允许忽略这个标记
-
reset
- 返回到最后一个标记,随后对 read 的调用将重新读入这些字节。如果当前没有任何标记, 这个流不被重置
-
transferTo
- 将当前输入流中的所有字节传送到给定的输出流,返回传递的字节数。这两个流都不应该处于关闭状态
-
nullInputStream
- 返回一个不包含任何字节的输入流
-
close