很多编程语言里关于io这块的时候,会使用流这个抽象概念,而不是用输入设备和接收设备这些名词,那么流代表什么呢?《Thinking in Java》里解释地非常好:所谓流,代表任何有能力产出数据的数据源对象(对应输入流)或者是有能力接收数据的接收端对象(输出流)。我们可以按照下图理解流,把程序抽象成一块内存,输入设备和接收设备分别是输入流和输出流,输入和输出、读入和写出都是相对于程序内存而言的。输入流有InputStream和Reader,输出流有OutputStream和Writer。
OutputStream out = System.out;
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bufw = new BufferedWriter(osw);
- 数据从内存输出到接收设备的顺序为:字符流->转换流->字节输出流,上面代码段里bufw是字符流,经过转换流变成字节流out后,由out输出到接收设备。
- 数据从发送设备输入到内存的顺序为:字节输入流->转换流->字符流。
这样的话,是不是理解了其中的区别了呢?因此,OutputStreamWriter是字符流转换成字节流的桥梁这一说法并没有错。