意义:简单的说就是这里都是面向字符的接口,其他Stream都是面向字节的接口。以前用的都是用ASCII吧字节转换为相应的字符表示在计算机上,但是现在出现了更多种编码方式如utf-8,utf-16等。为了不让字节在不同计算机上显示一样的内容,java有了书写器/阅读器,而它们处理字符而不是字节,在流链上,他应该在靠近用户的一层,甚至在最顶层,可以在IO(过滤器流)中看到例图。
基本API:java.io.Reader java.io.Writer同基本流一样,他们集体的子类向特定目标或源读或者写如数据。
书写器:Writer
他是一个抽象类,不能直接使用。
常用方法:Writer(),write(char[] text,int offset, int length), write(int c), write(char[] test), flush(),close(), write(String s),write(String s,int offset, int length)
基本方法(子类至少要覆盖的方放):write(char[] text,int offset, int length),flush(), close()
例如:
public class WriterTest {
public static void main(String[] args){
char[] testChar = {'y', 'u', 'e'};
Writer writer;
try {
writer = new OutputStreamWriter(
new FileOutputStream(new File("save.txt")), "UTF-8");
try {
writer.write(testChar, 0, testChar.length);
} catch (IOException e) {
TODO Auto-generated catch block
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
OutputStreamWriter是具体的Writer:根据编码方式把字符转换为字节并写入底层流,构造函数有底层流和编码的字符串:OutputStreamWriter(OutputStream out,String encoding)
close()方法会刷新书写器,然后关闭底层输入流,并释放所有资源。
阅读器:Reader
同Writer一样,它是一个抽象类,具体的工作得有它的子类来完成。
常用方法:Reader(), read(char[] text, int offset, int length), read(), read(char[] text), ready(), close().
read(char[] text, int offset, int length)最为常用。
read方法把将一个Unicode字符作为int返回,流结束返回-1,这相当于就是Unicode字符,只不过需要把int转换为char类型。
ready()返回boolean类型,指示当前阅读器是否可以无阻赛的读取。
InputStreamReader是具体的子类,和OutputStreamReader相反,它的作用是把底层流送过类的字节转换成字符,并返回相应的字符数。编发方式在构造函数中指定,要么默认要么显示指定。
简单的例子:
public class ReaderTest {
public static void main(String[] args) throws IOException{
Reader reader;
InputStream in;
try {
in = new FileInputStream("save.txt");
reader = new InputStreamReader(in,"UTF-8");
int i;
while( (i=reader.read())!=-1){
System.out.print((char)i);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
过滤器阅读器/书写器:
分别对应于BufferedInputStream/BufferedOutputStream,书写器和阅读器也有相应的缓冲BufferedReader/BufferedWriter,作用和BufferedInputStream/BufferedOutputStream是一样的。
实例:public class BufferedReaderTest {
public static void main(String[] args) throws IOException{
Reader reader;
StringBuffer sb = new StringBuffer();
InputStream in;
try {
in = new FileInputStream("save.txt");
reader = new BufferedReader(new InputStreamReader(in,"UTF-8"),1024);
int i;
while( (i=reader.read())!=-1){
sb.append((char)i);
}
//reader.close();
//in.close();
System.out.print(sb.toString());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
PrintWriter:略。
dfs