int read(); //读取单个字符 int read(char[] cbuf, int offset, int length); //将字符读入数组中的某一部分 boolean ready(); //判断此流是否已经准备好用于读取 InputStreamReader继承自Reader,因此该类的实例可以被各种输入字符流包装。为了达到最高效率,可以考虑在BufferedReader内包装InputStreamReader。例如程序12-20所示,我们首先创建了一个FileInputStream类的实例,然后转换为InputStreamReader对象is,最后使用BufferedReader进行包装。这样就可以将字节流转换为带缓冲功能的字符流。
程序12-20 TestInputStreamReader.java
public class TestInputStreamReader { public static void main(String[] args) { try { // 创建输入流 FileInputStream fis = new FileInputStream("D:/demo/test.txt"); InputStreamReader is = new InputStreamReader(fis); BufferedReader bis = new BufferedReader(is); // 从输入流读取数据 while (bis.ready()) { int c = bis.read(); System.out.print((char)c); } // 关闭输入流 bis.close(); is.close(); fis.close(); } catch (IOException e) { } } } 2.字节输出流转换为字符输出流
void write(char[] cbuf, int off, int len);//写入字符数组的某一部分 void write(int c);//写入单个字符 void write(String str, int off, int len);//写入字符串的某一部分 OutputStreamWriter继承自Writer,因此该类的实例可以被各种输出字符流包装。为了达到最高效率,可以考虑在BufferedWriter内包装OutputStreamWriter。例如程序12-21所示,我们首先创建了一个FileOutputStream类的实例,然后转换为OutputStreamReader对象os,最后使用BufferedWriter进行包装。这样就可以将字节流转换为带缓冲功能的字符流。