现代版本的Java定义了两种类型的流:字节流和字符流(Java最初版本只定义了字节流,但很快就添加了字符流).字节流为处理字节的输入和输出提供了一种便利的方法.例如,在读写二进制数据时就会使用字节流.字节流在处理文件时也特别有用.字符流是设计用于处理字符输入和输出的.他们使用unicode,因此可以国际化,而且在某些情况下,字符流比字节流效率更高.
Java定义两种不同类型的流这一事实使I/O系统十分庞大,因为这需要两个独立的类层次结构(一个用于字节,一个用于字符).I/O类的数量之多使其看上去让人恐惧.但是请记住,字节流的功能与字符流的功能大部分是并列的.
还有一点:在最低级别,所有I/O都是字节.基于字符的流只是为了提供更方便有效的处理字符的方法.