黑马程序员技术交流社区
标题:
Stream 装饰/组合的问题
[打印本页]
作者:
张晨
时间:
2011-9-7 11:00
标题:
Stream 装饰/组合的问题
[code=java]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class BufferedKey {
public void output()
{
BufferedReader bufr =
new BufferedReader (new InputStreamReader (System.in) );
/**
* 输入顺序 键盘-->内存 键盘是字节流,如果要取得字符流就需要转换
*/
BufferedWriter bufw =
new BufferedWriter (new OutputStreamWriter (System.out));
/**
* 输出顺序 内存-->屏幕 屏幕输出的是字节流,所以将内存中字符流转换成字节流,然后是不是默认编码表(GBK)在转化成字符输出?
*/
/**
* 上面两个转换是否重复了,我们输入直接读取字节流,然后让字节流直接放进OutputStreamWriter?
*/
String line;
try
{
while ( (line = bufr.readLine() ) != null )
{
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
catch (IOException e) {
System.out.println("读写错误!");
e.printStackTrace();
}
}
public static void main (String argc[])
{
BufferedKey bk = new BufferedKey();
bk.output();
}
}[/code]
[
本帖最后由 张晨 于 2011-09-07 11:03 编辑
]
作者:
单兴恒
时间:
2011-9-7 12:32
是默认编码表转化成字符输出
Java JDK API上定义的public class BufferedReader extends Reader,如果你不使用BufferedReader,也可以不转换。
BufferedReader读取的是字符流,System.in表示的是字节流(InputStream),现在接收的是字符流,需要将字节流转换成字符流(InputStreamReader)。
System.out表示的对应系统的标准输出,一般是显示器。现在要从内存中现在要输出的是字节流,但内存中存在的是字符流,需要将字符流转换成字节流(OutputStreamReader)。
[
本帖最后由 单兴恒 于 2011-09-07 14:20 编辑
]
作者:
匿名
时间:
2011-9-7 12:53
我想你是觉得在这个程序中首先将输入字节流转换为字符流,然后又将字符流转换字节流输出有点重复,因为输入是字节流,输出也是字节流,可不可以不要转换?可以很肯定的回答是可以的,但是因为转换成字符流可以更方便我们对字符进行操作,试想一下,如果你不用bufferedReader,readLine()这个方法你还能用吗,那必须不能,那样在处理读取数据方面就变得复杂了,首先while语句执行的次数可不止翻倍那么简单了,所有说,将字节流转换成字符流不是必须,但是却可以简化程序,提供方便。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2