I/O流之转换流
Java I/O流体系中按照处理的数据类型可分为字符流和字节流
字节流可以转换为字符流
- OutputStreamWriter类: 将字节输出流变为字符输出流
- InputStreamReader类 : 将字节输入流变为字符输入流
那么,为什么要把字节流转换为字符流呢?
首先来看一下这两个转换流的继承关系和构造方法
InputStreamReader | OutputStreamWriter | |
继承关系 | public class InputStreamReader extends Reader | public class OutputStreamWriter extends Writer |
构造方法 | public InputStreamReader(InputStream in) | public OutputStreamWriter(OutputStream out) |
字符流虽然需要缓冲区进行处理,但是字符流输出有一个特点:可以直接输出一个字符串数据,所以有些时候就需要把字节流转换为字符流
总之,转换流的存在,就是为了更好地处理中文。
同时,我们根据以上I/O流体系图可以看出,FileReder类和FileWriter类都继承于转换流,即所有字符流处理的时候是经过转换后得来的。
范例:字节流转换为字符流
public class Test {
public static void main(String[] args) {
File file=new File("C:"+File.separator+"Users"+File.separator+"10320"+
File.separator+"ideaProjects"+File.separator+"file.txt");
if(!file.getParentFile().exists()) {//判断父目录存在
file.getParentFile().mkdirs();//创建多级父目录
}
try {
OutputStream output =new FileOutputStream(file);
Writer out=new OutputStreamWriter(output);//字节流转换为字符流
String message="hello word";
out.write(message);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}