需求:
通过键盘录入数据
当录入一行数据后,就将该行数据进行打印
如果录入的数据是 over,那么停止录入,结束程序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的构造方法,明明就是把字节流转成了字符流,为什么说是字符流通向字节流的桥梁,怎么搞的,晕了,求解释

解决方案 »

  1.   

    API的解释:
    OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
      

  2.   

    分析下你的程序,首先
    读取数据(文件,字节流)--->inputStream-->inputStreamReader-->bufferReader-->内存中(字符流)---输入流,其中inputStreamReader是将字节流转化为字符流,不难理解
    其次,输出,
    调用bufferWriter的write方法,从内存中读取刚才读进来的字符流,看源码就知道,bufferWriter的write会调用OutputStreamWriter的write方法,而outputStreamWriter的write方法会调用outputStream的write方法,最终以字节流的形式输出
    其实就是输入与输出相反地一个过程,希望对你有用,说的有点多
      

  3.   

    bufferWriter的write会调用OutputStreamWriter的write方法,而outputStreamWriter的write方法会调用outputStream的write方法------这句话怎么回事不对吧,没有互相调用吧
      

  4.   

    分析下你的程序,首先
    读取数据(文件,字节流)--->inputStream-->inputStreamReader-->bufferReader-->内存中(字符流)---输入流,其中inputStreamReader是将字节流转化为字符流,不难理解
    其次,输出,
    调用bufferWriter的write方法,从内存中读取刚才读进来的字符流,看源码就知道,bufferWriter的write会调用OutputStreamWriter的write方法,而outputStreamWriter的write方法会调用outputStream的write方法,最终以字节流的形式输出