A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李文帅 中级黑马   /  2013-12-6 22:57  /  1206 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李文帅 于 2013-12-7 13:48 编辑

InputStreamReader类和OutputStreamWriter类的构造方法接收的都是字节流对象,
但是API文档上怎么说InputStreamReader 是字节流通向字符流的桥梁,是将字节流对象转换为字符流对象;
而OutputStreamWriter 是字符流通向字节流的桥梁,是将字符流对象转换为字节流对象呢?求解...

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

10 个回复

倒序浏览
本帖最后由 25343215 于 2013-12-6 23:13 编辑

见代码:假设我们要完成一个带有缓冲区的键盘输入流,和屏幕输出流,希望这样举例,你能懂

new BufferedReadrer(new InputStreanReader(System.in));
在这个过程中,System.in 是字节流,通过InputSteamReader,转换成默认字节编码的字符流,最后传递给带有读取一行特性的BuferedReader。
new BufferedWriter(new OutputStreamWriter(System.out));
通过 读取一行的方式,把输入传输到BufferedWriter中,这时是字符流,然后通过OutputStreamWriter,完成默认字符集的,解码操作。变成字节流,最后System.out输出到屏幕。

  1. import java.io.*;

  2. class  TransStreamDemo
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 //获取键盘录入对象。
  7.                 //InputStream in = System.in;

  8.                 //将字节流对象转成字符流对象,使用转换流。InputStreamReader
  9.                 //InputStreamReader isr = new InputStreamReader(in);

  10.                 //为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader

  11.                 //BufferedReader bufr = new BufferedReader(isr);

  12.                 //键盘的最常见写法。
  13.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  14.                 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

  15.                 String line = null;

  16.                 while((line=bufr.readLine())!=null)
  17.                 {
  18.                         if("over".equals(line))
  19.                                 break;
  20.                         bufw.write(line.toUpperCase());
  21.                         bufw.newLine();
  22.                         bufw.flush();
  23.                 }

  24.                 bufr.close();

  25.         }
  26. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
InputStreamReader 是字节流通向字符流的桥梁,是将字节流对象转换为字符流对象;就是将接受的字节流对象转换成字符流对象么以供我们进行相应的操作后通过OutputStreamWriter 再将字符流转换成字节流输出!
是这样的吧!!

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
早点休息,同学们。
回复 使用道具 举报
滔哥 发表于 2013-12-6 23:35
早点休息,同学们。

滔哥也早点休息。

我看完视频最后15分钟,就睡觉了。
回复 使用道具 举报
搞分,分不够,想办法中
回复 使用道具 举报
滔哥 发表于 2013-12-6 23:35
早点休息,同学们。

搞分,分不够,想办法中
回复 使用道具 举报
25343215 发表于 2013-12-6 23:08
见代码:假设我们要完成一个带有缓冲区的键盘输入流,和屏幕输出流,希望这样举例,你能懂

new BufferedRe ...

谢谢你的解答,但还是有点糊涂,我在看看毕老师的视频吧
回复 使用道具 举报
石头6004 发表于 2013-12-6 23:11
InputStreamReader 是字节流通向字符流的桥梁,是将字节流对象转换为字符流对象;就是将接受的字节流对象转 ...

哦,我是想问参数都是字节流对象,为什么说InputStreamReader是将字节流转换为字符流对象,而OutputStreamWriter是将字符流转换为字节流呢
回复 使用道具 举报
李文帅 发表于 2013-12-7 13:44
哦,我是想问参数都是字节流对象,为什么说InputStreamReader是将字节流转换为字符流对象,而OutputStrea ...

InputStreamReader是输入,将带的参数所对应的内容,读进来我们需要将其转换成字符流方便操作;OutputStreamReader是输出,将字符转换成字节方便写出去!
我也说不清楚!
回复 使用道具 举报
nputStream  此抽象类是表示字节输入流的所有类的超类

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。

每次调用 InputStreamReader 中的一个 read()() 方法都会导致从基础输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从基础流读取更多的字节,使其超过满足当前读取操作所需的字节

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马