【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方法,最终以字节流的形式输出
其实就是输入与输出相反地一个过程,希望对你有用,说的有点多
------解决方案--------------------说一下我个人的看法。首先弄明白输入流的终点是内存,而输出流的起点是内存。首先你从键盘获得字节输入流转化成了字符,所以当你输出时自然就是从字符流到字节流了