黑马程序员技术交流社区

标题: OutputStreamWriter 是字符流通往字节流的桥梁 这个怎么理解 [打印本页]

作者: 陈波    时间: 2012-5-10 22:09
标题: OutputStreamWriter 是字符流通往字节流的桥梁 这个怎么理解
public static void main(String[] args) throws IOException
{
  InputStream in = System.in;
  InputStreamReader isr = new InputStreamReader(in);
  BufferedReader bufr = new BufferedReader(isr);
  OutputStream out = System.out;
  OutputStreamWriter osw = new OutputStreamWriter(out);//OutputStreamWriter 不是字符流通往字节流的桥梁吗 为什么还是关联的字节流呢?
  BufferedWriter bufw = new BufferedWriter(osw);

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


作者: 黄坚声    时间: 2012-5-10 22:29
哥们,你问的问题有点模糊,但是我也能明白你问什么。理解新手!
双胞胎:InputStreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换。

InputStreamReader需要和InputStream套接

OutputStreamWriter需要和OutputStream套接

因为字符流的底层就是字节流。

作者: 金肖    时间: 2012-5-10 23:55
可使用指定的 charset 将要写入流中的字符编码成字节。
它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。
在写入底层输出流之前,得到的这些字节将在缓冲区中累积。
为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。
作者: 何万县    时间: 2012-5-11 00:09
兄弟,其实就是把字节流转换为字符流的类,其他的都都是。。。不说了
作者: 徐然    时间: 2012-5-11 01:02
你也说了OutputStreamWriter 是字符流通往字节流的桥梁,桥梁就是桥梁,不是桥的两端
通俗一点讲,它就是把字节流转换成字符流
既然他是桥梁,转换字节流的,那你是不是要给他一个字节流,它才能转换啊
你不给他他可不知道怎么转换
作者: 陈忠    时间: 2012-5-11 01:46
用大白话可能更容易理解。
InputStreamReader和OutputStreamReader,都叫字符转化流。可以指定字符的编码
InputStreamReader输入流转化,即将从源输入的字节流转换成字符流,所以接收的是Inputstream对象
OutputStreamWriter输出流,即将源输入的字符流转换成字节流。最终以字节流的形式输出,那么接收的对象依然还是字节流OutputStream。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2