所谓的转换流指的是可以实现字节流与字符流操作的功能转换,例如:进行输出的时候 OutputStream 需要将内容变为字节数组后才可以进行输出,而 Writer 可以直接输出字符串,这一点是方便的,所以很多人就认为需要提供有一种转换的机制,来实现不同流类型的转化操作,为此在 java.io 包里面提供有两个类: InputStreamReader 、 OutputStreamWriter 。
| 类 |
InputStreamReader : |
OutputStreamWriter : |
| 定义 |
public class OutputStreamWriter extends Writer |
public class InputStreamReader extends Reader |
| 构造方法 |
public OutputStreamWriter(OutputStream out) |
public InputStreamReader(InputStream in) |
通过类的继承结构与构造方法可以发现,所谓的转换处理就是将接收到的字节流对象通过向上转型变为字符流对象。
1 import java.io.File;
2 import java.io.FileOutputStream;
3 import java.io.OutputStream;
4 import java.io.OutputStreamWriter;
5 import java.io.Writer;
6 public class JavaAPIDemo {
7 public static void main(String[] args) throws Exception {
8 File file = new File("D:" + File.separator + "hello" + File.separator + "mldn.txt");
9 if (!file.getParentFile().exists()) {
10 file.getParentFile().mkdirs(); // 父目录必须存在
11 }
12 OutputStream output = new FileOutputStream(file) ;
13 Writer out = new OutputStreamWriter(output) ; // 字节流变为字符流
14 out.write("www.mldn.cn"); // 直接输出字符串,字符流适合于处理中文
15 out.close();
16 }
17 }
JavaAPIDemo
讲解转换流的主要目的基本上不是为了让开发者去记住它,而是知道有这样一种功能,但同时更多的是需要进行结构的分析处理。通过之前的字节流与字符流的一系列的分析之后你会发现 OutputStream 类有 FileOutputStream 直接子类、 InputStream 类有 FileInputStream 直接子类,但是来观察一下 FileWriter 、 FileReader 类的继承关系。
FileWriter |
FileReader |
| public class FileWriter extends OutputStreamWriter |
public class FileReader extends InputStreamReader |
实际上所谓的缓存都是指的是程序中间的一道处理缓冲区。