对程序语言的设计者来说,创建一个好的输入输(I/O)系统是一项艰难的任务
字节流/字符流
- 在Java API中,可以从其中读入一个字节序列的对象称做输入流,而可以向其中写入一个字节序列的对象称做输出流
- 抽象类 InputStream 和 OutputStream 构成了可输入/输出(I/O)类层次结构的基础
- 因为面向字节的流不便于处理以Unicode形式(char)存储的信息,所以抽象类 Reader 和 Writer 中继承出来一个专门用于处理Unicode字符的类层次结构
读写字节
- InputStream类只有一个抽象方法:
public abstract int read() throws IOException;
这个方法,遇到输入源结尾处返回-1。
InputStream类还有若干个非抽象方法,如:
int read(byte b[], int off, int len)
long skip(long n)
这些方法都要调用抽象的read方法,因此 InputStream 的子类都一定会重写这一方法。
- 与InputStream 类似,OutputStream类也定义了一个抽象方法:
public abstract void write(int b) throws IOException;
- 阻塞
read()和write()方法在执行时都将阻塞,直至字节确实被读入或写出。这意味着如果流不能被立刻访问,那么当前的线程将被阻塞。 - close
当完成对输入输出流的读写时,应该通过调用close方法来关闭它,释放资源。
输入/输出流都实现 Closeable 这一接口:
public interface Closeable extends AutoCloseable {
public void close() throws IOException;
}
网友评论