字符流主要是用来处理字符的。Java采用16位的Unicode来表示字符串和字符,对应的字符流按输入和输出分别称为readers和writers。
InputStreamReader和OutputStreamWriter
在构造这两个类对应的流时,它们会自动进行转换,将平台缺省的编码集编码的字节转换为Unicode字符。对英语环境,其缺省的编码集一般为ISO8859-1。
BufferedReader和BufferedWriter
这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理。如:
```java
1 import java.io.*;
2 public class Echo {
3 public static void main(String[] args) {
4 BufferedReader in =
5 new BufferedReader(
6 new InputStreamReader(System.in));
7 String s;
8 try {
9 while((s = in.readLine()).length() != 0)
10 System.out.println(s);
11 // An empty line terminates the program
12 } catch(IOException e) {
13 e.printStackTrace();
14 }
15 }
16 }
```java
该程序接受键盘输入并回显。
对BufferedReader类,该类的readLine()方法能一次从流中读入一行,但对于BufferedWriter类,就没有一次写一行的方法,所以若要向流中一次写一行,可用PrintWriter类将原来的流改造成新的打印流,PrintWriter类有一个方法println(),能一次输出一行。如:
............
PrintWriter out = new PrintWriter(new BufferedWriter(
new FileWriter("D:\javacode\test.txt")));
out.println("Hello World!");
out.close();
............