想要查看此教程的目录请点击:Java IO教程目录贴地址
在Java API中,Java Reader类(java.io.Reader)是所有Reader的基类。Reader和InputStream不同的地方在于它是基于字符流的而不是字节流。换句话说,Reader是用来读取文本的数据的,而InputStream是用来读取原始的字节的。
Unicode字符
现在,许多应用都使用UTF (UTF-8 或 UTF-16)格式来存储文本数据。UTF-8中一个或多个字节来表示一个字符。UTF-16编码中一个字符用两个字节来表示。因此在使用UTF编码时,文本数据中的一个字节并不一定代码一个字符。如果你只是通过InputStream来读取字节然后把字节转换成字符,那么并不一定会得到你想要的结果。
我们有Reader相关类来解决这个问题。它们可以把字节转换成字符。你需要告诉Reader你要以什么编码格式来读取数据,这会在实例化Reader时设置(实际上时在你实例化其子类的时候)。
用Reader读取字符
Reader的 read()方法会返回一个int值,包含下一个要读取的的字符值。如果方法返回 -1 则说明已经没有数据了。也就是说,-1作为int值,而不是-1作为字节或char值。这是一个不同的地方。
Reader子类
你更多的会用Reader的子类而不是直接用Reader。Java IO包含了许多Reader的子类。例如InputStreamReader,CharArrayReader,FileReader等许多其他的。更多的内容可以去看“Java IO 概览”的相关章节。
Reader 和 数据源
文件,字符数组,网络socket等数据是Reader有代表性的数据源,这个也是在“Java IO 概览”有详细的描述。