本帖最后由 HM朱蛟 于 2013-4-16 02:09 编辑
OutputStreamWriter 和BufferedWriter都是继承的 java.io.Writer 都是代表一个字符流,前者是字节输出流转成字符输出 流,后者是一个字符输出流的增强装饰类
他们都有flush方法
OutputStreamWriter.flush()
刷新该流的缓冲。
BufferedWriter.flush()
刷新该流的缓冲。
那么为什么该例中使用
osw.flush(); //经过测试,是这句出了问题 和 bw.flush 产生了截然不同的运行结果
于是心生疑惑,他们的区别在哪儿啊,他们操作的流不是一个吗?
求来个形象的解释 {:soso_e101:} 希望得到同学们的指点 哥们儿先谢了
代码如下:- import java.io.*;
- class Run
- {
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- public static void main(String[] args) throws IOException
- {
- /*
- //接收字节流
- InputStream is = System.in;
-
- //转成字符流
- InputStreamReader isr = new InputStreamReader(is);
-
- //利用字符流的增强类
- BufferedReader br = new BufferedReader(isr);
- */
-
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- //--------------------------------------------------------
-
-
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
- /*
- OutputStream os = System.out;
-
- OutputStreamWriter osw = new OutputStreamWriter(os);
-
- BufferedWriter bw = new BufferedWriter(osw);
- */
- String s = null;
- //调用行读取函数
- while((s=br.readLine())!=null)// 返回个字符串
- {
- if("over".equals(s))
- break;
-
- bw.write(s.toUpperCase());//直接将字符写入硬盘
- bw.newLine();//跨平台的换行
- bw.flush();//注意,写操作必须刷新。刷新很重要
-
- /*
- 为什么这样不行?
- osw.write(s.toUpperCase());//这句写是可以的
- bw.newLine();
- osw.flush(); //经过测试,是这句出了问题
-
- 分析:
- osw是字节流->OutputStream
-
- 我查了OutputStream的API:
- void flush()
- 刷新此输出流并强制写出所有缓冲的输出字节。
-
- 这里bw.flush和osw.flush有什么不同之处么?
- */
- }
- }
- }
复制代码 |