|--字符流( 字符流 = 字节流 +编码表。)
|--字符输入流
Reader ------抽象类
int read():一次读取一个字符
int read(char[] chs):一次读取一个字符数组
|--InputStreamReader ------extends Reader
InputStreamReader = FileInputStream + 编码表(GBK)
|--FileReader ------extends InputStreamReader
FileReader = FileInputStream + 编码表(GBK)
|--BufferedReader ------extends Reader
String readLine():一次读取一个字符串
|--StringReader ------extends Reader
|--字符输出流
Writer ------抽象类
void write(int ch):一次写一个字符
void write(char[] chs,int index,int len):一次写一个字符数组的一部分
|--OutputStreamWriter ------extends Writer
OutputStreamWriter = FileOutputStream + 编码表(GBK)
|--FileWriter ------extends OutputStreamWriter
FileWriter = FileOutputStream + 编码表(GBK)
|--BufferedWriter ------extends Writer
void newLine():写一个换行符
void write(String line):一次写一个字符串
|--PrintWriter ------extends Writer
|--StringWriter ------extends Writer
OutputStreamWriter :OutputStreamWriter = FileOutputStream + 编码表(GBK)
是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。
为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如: Writer out
= new BufferedWriter(new OutputStreamWriter(System.out));
构造方法:
-OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
-OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流
常用方法:
-public void write(int c):写一个字符
-public void write(char[] cbuf):写一个字符数组
-public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
-public void write(String str):写一个字符串
@Test
public void testOsw()throws Exception{
String path = this.getClass().getResource("/test7").getPath();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(new File(path)));
osw.write("a");
osw.write(98);
osw.write("\n");
osw.write(new char[]{'a','b','c','d','e'});
osw.write("\n\r");
osw.write(new char[]{'a','b','c','d','e'},0,2);
osw.write("\n\r");
osw.write("hello world");
osw.write("\n\r");
osw.write("hello world",0,5);
osw.write("\n\r");
osw.flush();
osw.close();
}
@Test
public void testBw()throws Exception{
String path = this.getClass().getResource("/test7").getPath();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(path))));
bw.write("a");
bw.write(98);
bw.write("\n");
bw.newLine();
bw.write(new char[]{'a','b','c','d','e'});
bw.write("\n\r");
bw.write(new char[]{'a','b','c','d','e'},0,2);
bw.write("\n\r");
bw.write("hello world");
bw.write("\n\r");
bw.write("hello world",0,5);
bw.write("\n\r");
bw.flush();
bw.close();
}