日期:2014-05-20  浏览次数:20740 次

【IO】字符流通向字节流的桥梁:OutputStreamWriter 问题
需求:
通过键盘录入数据
当录入一行数据后,就将该行数据进行打印
如果录入的数据是 over,那么停止录入,结束程序

Java code
import java.io.*;
public class TransStreamDemo01 {
    public static void main(String[] args) throws IOException {
        InputStream in = System.in;    //获取键盘字节流对象
        InputStreamReader isr = new InputStreamReader(in);    //字节流转成字符流
        BufferedReader bufr = new BufferedReader(isr);        //为了提高效率,使用缓冲区 BufferedReader

        OutputStream out = System.out;    //字节流对象
        OutputStreamWriter osw = new OutputStreamWriter(out);    //
        BufferedWriter bufw = new BufferedWriter(osw);

        String str = null;
        while((str = bufr.readLine()) != null) {
            if("over".equals(str))
                break;
            bufw.write(str);
            bufw.newLine();
            bufw.flush();
        }
        bufr.close();
    }
}


OutputStream out = System.out; //字节流对象 
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bufw = new BufferedWriter(osw); 
实例中的三行代码,OutputStreamWriter说的是字符流通向字节流的桥梁,意思不就是说把字符流转成字节流吗。out 对象是个字节流,而OutputStreamWriter是个字符流,把out传递给OutputStreamWriter的构造方法,明明就是把字节流转成了字符流,为什么说是字符流通向字节流的桥梁,怎么搞的,晕了,求解释


------解决方案--------------------
由字节流生成字符流,然后往字符流里写入的字符会通过这个“桥”变成字节流里的字节。

对于被传递的内容而言,这个桥是从字符流到字节流的
------解决方案--------------------
分析下你的程序,首先
读取数据(文件,字节流)--->inputStream-->inputStreamReader-->bufferReader-->内存中(字符流)---输入流,其中inputStreamReader是将字节流转化为字符流,不难理解
其次,输出,
调用bufferWriter的write方法,从内存中读取刚才读进来的字符流,看源码就知道,bufferWriter的write会调用OutputStreamWriter的write方法,而outputStreamWriter的write方法会调用outputStream的write方法,最终以字节流的形式输出
其实就是输入与输出相反地一个过程,希望对你有用,说的有点多
------解决方案--------------------
说一下我个人的看法。首先弄明白输入流的终点是内存,而输出流的起点是内存。首先你从键盘获得字节输入流转化成了字符,所以当你输出时自然就是从字符流到字节流了