黑马程序员技术交流社区
标题:
一个小疑惑:BufferedWrite.flush和OutputStreamWriter.flush的区别
[打印本页]
作者:
HM朱蛟
时间:
2013-4-15 03:39
标题:
一个小疑惑:BufferedWrite.flush和OutputStreamWriter.flush的区别
本帖最后由 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有什么不同之处么?
*/
}
}
}
复制代码
作者:
周一川
时间:
2013-4-15 07:35
InputStreamReade 是一个读取字符的流他flush一个一个字符往程序上读的,读完后才刷新 BufferedReader 是一个缓冲区 是一批一批的读,读完才刷新
作者:
王大斌
时间:
2013-4-15 07:44
我这里运行时可以的。没有什么问题。
检查一下,是不是你的bw在使用的时候,将另一个流的bw当成这个bw了
package day1;
import java.io.*;
class ChatDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
OutputStream os = System.out;
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bws = new BufferedWriter(osw);
String s = null;
while((s=br.readLine())!=null)// 返回个字符串
{
if("over".equals(s))
break;
osw.write(s.toUpperCase());//这句写是可以的
bws.newLine();
osw.flush(); //经过测试,是这句出了问题
}
}
}
我这里运行很好
作者:
HM朱蛟
时间:
2013-4-15 12:34
谢谢同学指点
作者:
黄玉昆
时间:
2013-4-15 12:41
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2