完整的流家族
将流类家族中的成员按它们的使用方法进行划分,就可以形成处理字节和字符两个单独的层次接口,InputStream和OutputStream可以读写单个的字节或字节数组,这些类构成了如下图所示的层次结构的基础。要想读写字符串和数字,就需要功能更加强大的子类,例如,DataInputStream和DataOutputStream可以以二进制格式读写所有的基本Java类型。最后,还包含了多个很有用的流,例如,ZipInputStream和ZipOutputStream可以以常见的ZIP压缩格式读写文件。
另一方面,对于Unicode文本,可以使用抽象类Reader和Writer的子类,如下图所示,Reader和Writer类的基本方法与InputStream和OutputStream方法类似。
abstract int reader()
abstract void write(int c)
read方法将返回一个Unicode码元(作为一个在0~65535的整数),或者在碰到文件结尾时返回-1。write方法在调用时,要传递一个Unicode码元。
Java SE 5.0引入了4个附加的接口:Closeable、Flushable、Readable和Appendable,如下图所示,
他们别拥有
- Closeable接口只有一个方法:
void close() throws IOException
关闭此流并释放与其关联的所有系统资源。 如果流已经关闭,则调用此方法无效。 - Flushable接口也只有一个方法:
void flush() throws IOException
通过将任何缓冲的输出写入基础流来刷新此流。 - Readable接口也只有一个方法:
int read(CharBuffer cb) throws IOException - Appendable接口有三个用于添加单个字符和字符序列的方法:
1) Appendable append(char c) throws IOException
将指定的字符追加到此 Appendable 。
2)Appendable append(CharSequence csq) throws IOException
将指定的字符序列追加到此Appendable 。
根据哪个类实现字符序列csq ,可能不会追加整个序列。 例如,如果csq是CharBuffer,则追加的子序列由缓冲区的位置和限制定义。
3)Appendable append(CharSequence csq, int start, int end) throws IOException
将指定字符序列的子序列追加到此Appendable 。
这种方法的调用out.append(csq, start, end)时csq不是null ,则以完全相同的方式调用out.append(csq.subSequence(start, end))
文章来源于《Java核心技术》这本书