本帖最后由 wll_sx1990 于 2013-7-13 21:57 编辑
我把你的问题分为三个回答吧:
/*
字符流转换为字节流,很明显能感受到InputStreamReader的作用,但是OutputStreamWriter的作用还是有些小困惑,首先,BufferedWriter bufw=new BufferedWriter(new OutputStreamReader(System.out)); 用bufw.write(); 可以把一行数据写到控制台上,用System.out.println()貌似可以很好解决
*/
1、
对于这个问题,OutputStreamWriter和BufferedWriter是有区别的,
OutputStreamWriter(OutputStream out, CharsetEncoder enc)
Creates an OutputStreamWriter that uses the given charset encoder.
看到了没,这是java官方对outputStreamWriter的其中一种构造方法的定义,其中有字符编码的要求,而在BufferedWriter的构造函数中则没有这样的要求。所以,他们的一个很显著地区别在于编码的控制。从另一个方面说,bufferedWriter是将字符流进行了包装,可以说他是与字符流打交道的,而InputStreamWriter是直接与字节流打交道的,这也是它可以控制编码的原因。
2、对于System的out对象的println方法,其中的out就是PrintStream,它具备将字符串输出到控制台的函数,这个函数是先将字符串输出,然后输出换行。你知道PrintStream的构造函数吧,它也是与字节流打交道的,所以他也可以控制编码。对于BufferedWriter我想你是清楚的。
/*
其次, 应该就是把数据写到一个文件里了,直接用BufferedWriter =new BufferedWriter(new FileWriter("1,txt")); 也很好用
这样的装饰,是不是,对于二进制的文件可以整行的读写,这样的好处呢,求解
*/
3、对于这第三个问题,对于二进制文件,千万不要用字符流读写,如果你用字符流读写一部电影那么这个电影最后要么不能播放,要么是缺鼻子少眼,因为字符流在内部是对字节进行了处理的,通常就是两个字节转换为一个字符,这样在拷贝电影的时候,就会出现当初编码和最后解码的不一致的现象,所以不要用字符流读写二进制文件数据,而且这样效率低。
|