今天开始学习字节流。本文简单介绍所有字节输入流的父类InputStream。
InputStream是抽象类。这个抽象类是所有表示字节输入流的类的父类。继承这个抽象类的类必须提供返回下一个输入字节的方法。定义如下:
public abstract class InputStream implements Closeable
方法
方法 | 说明 |
---|---|
public abstract int read() throws IOException; | 从输入流中读取数据的下个字节。 |
public int read(byte b[]) throws IOException{…} | 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。 |
public int read(byte b[], int off, int len) throws IOException{…} | 将输入流中最多len个数据字节读入byte数组。 |
public long skip(long n) throws IOException{…} | 跳过和丢弃此输入流中数据的n个字节。 |
public int available() throws IOException{…} | 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。 |
public void close() throws IOException {} | 关闭此输入流并释放与该流关联的所有系统资源。 |
public synchronized void mark(int readlimit) {} | 在此输入流中标记当前的位置。对reset方法的后续调用会在最后标记的位置重新定位此流,以便后续读取重新读取相同的字节。 |
public synchronized void reset() throws IOException {…} | 将此流重新定位到最后一次对此输入流调用mark方法时的位置。 |
public boolean markSupported() {…} | 测试此输入流是否支持mark和reset方法。 |
read()
/**
* 从输入流中读取数据的下个字节。读取的字节为int型,范围为0~255。
* 如果因为到了流末尾导致没有可用的字节,返回-1。
* 在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
*
* 子类必须提供方法的实现。
*
* @return 如果到达流末尾,返回-1,否则返回从输入流中读取到的数据的下个字节
* @exception IOException 如果发生I/O错误
*/
public abstract int read() throws IOException;
read(byte b[])
/**
* 从输入流中读取一定数量的字节并把它们保存到缓冲数组b中。返回读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。
*
* 如果b的长度为0,不会读取字节,并返回0;否则至少会尝试读取一个字节。如果因为流在文件末尾导致没有字节可用,返回-1;否则至少读取一个字节并保存到b中。
*
* 将读取的第一个字节存储在b[0]中,下一个字节存储在b[1]中,依次类推。读取的字节数最多等于b的长度。设k为实际读取的字节数;这些字节将存储在 b[0]到b[k-1]的元素中,不影响b[k]到b[b.length-1]的元素。
*
* 类InputStream的read(b)方法的相当于:read(b, 0, b.length)
*
* @param b 存储读入数据的缓冲区。
* @return 读入缓冲区的总字节数;如果因为已经到达流末尾而不再有数据可用,则返回-1。
* @exception IOException 如果不是因为流位于文件末尾而无法读取第一个字节;如果输入流已关闭;如果发生其他I/O错误。
* @exception NullPointerException 如果b为null
* @see