流本质上分为输入流与输出流,或字节流与字符流,而转换流与缓冲流本质上是功能流,转换流是为字符指定码表,缓冲流是为了加速。
转换流:
OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。




当我们需要指定码表的时候,需要用转换流,而不需要指定码表的时候,可以用他的直接子类,FileWriter.同时使用转换流,还需要配合FileOutputStream使用。
代码如下:
public class Demo02 {
public static void main(String[] args) throws IOException {
// 创建字节输出流对象,明确目的地
FileOutputStream fos=new FileOutputStream("D:\\io0803\\utf.txt",true);
//创建转换流对象,明确码表
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
//写出一个字符串
osw.write("我很好");
//释放资源
osw.close();
}
}
InputStreamReader:
是字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。




代码:
public class Demo03 {
public static void main(String[] args) throws IOException {
// 明确字节输入流对象,明确目的地
FileInputStream fis = new FileInputStream("D:\\io0803\\utf8.txt");
// 创建转换流对象,指定编码表
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
// 读取
int len = 0;
while ((len = isr.read()) != -1) {
System.out.println((char) len);
}
// 释放资源
isr.close();
}
}
缓冲流:

代码:
public class Demo05 {
public static void main(String[] args) throws IOException {
//创建字符输入流,明确数据源
FileReader fr=new FileReader("D:\\io0803\\abc.png");
//创建缓冲字符流加速
BufferedReader br=new BufferedReader(fr);
//创建字符输入流,明确目的地
FileWriter fw=new FileWriter("D:\\io0803\\a\\abc.png");
//创建缓冲字符输出流加速
BufferedWriter bw=new BufferedWriter(fw);
//开始复制
int len=0;
while((len=br.read())!=-1){
bw.write(len);
}
//释放资源
br.close();
bw.close();
}
}
使用字符缓冲流完成文本文件的复制,用特有的方法一行一行的复制:
public class Demo07 {
public static void main(String[] args) throws IOException {
// 创建字节输入流,明确数据源
FileInputStream fis=new FileInputStream("D:\\io0803\\demo01.txt");
//创建转换流对象,指定码表
InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
//创建字符缓冲流对象,加速
BufferedReader br=new BufferedReader (isr);
//创建字节输出流。明确目的地
FileOutputStream fos=new FileOutputStream("D:\\io0803\\buffer3.txt");
//创建转换流对象,明确码表
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
//加速
BufferedWriter bw=new BufferedWriter(osw);
//
String line=null;
while((line=br.readLine())!=null){
//写一行
bw.write(line);
//换行
bw.newLine();
//刷新流
bw.flush();
}
//释放资源
br.close();
bw.close();
}
}

浙公网安备 33010602011771号