黑马程序员技术交流社区

标题: IO的缓冲区的问题 [打印本页]

作者: 沙漠里的小鱼    时间: 2012-2-16 01:43
标题: IO的缓冲区的问题
FileWiter fw =new FileWriter("buf.txt") ;
BufferedWiter bufw =new  BufferedWiter(fw);
我的疑惑就是先创建一个流  FileWiter fw =new FileWriter("buf.txt") ;
那第二个创建的流为什么不是 BufferedWiter fw =new  BufferedWiter("buf.txt") ; 为什么是BufferedWiter bufw =new  BufferedWiter(fw);
而且BufferedWiter bufw =new  BufferedWiter(fw);中的小括号fw是FileWiter fw =new FileWriter("buf.txt") ;这个中的fw
作者: 李杨    时间: 2012-2-16 02:23
本帖最后由 李杨 于 2012-2-16 02:25 编辑

FileWriter是向字符文件写入数据,BufferedWiter 是加以缓冲字符数据,

你问的第二个创建的流为什么不是 BufferedWiter fw =new  BufferedWiter("buf.txt") ;首先你需要知道BufferedWiter的参数列表里应该是什么?是Writer的子类,应用到了多态,因为FileWiter间接继承了Writer这个抽象类 。BufferedWiter不能直接打开文件,它只能给已经打开的文件写入缓冲流,就是BufferedWiter增强了FileWriter的功能,你的FileWriter才能与文件打交道。

这种功能的递增,就是装饰模式,JavaIO用的就是装饰模式。
装饰模式实现不同细节的功能,想要强大的功能或者低效的功能随便你来装饰。
作者: 黄锦成    时间: 2012-2-16 08:50
缓冲区是用来提高效率的。BufferedWriter中的读取方法其实是使用了FileWriter中的读取方法,所以要把FileWriter对象穿进去
作者: 沙漠里的小鱼    时间: 2012-2-16 17:28
李杨 发表于 2012-2-16 02:23
FileWriter是向字符文件写入数据,BufferedWiter 是加以缓冲字符数据,

你问的第二个创建的流为什么不是 B ...

讲的不错 谢谢 可是我还是不大明白啊  
作者: 沙漠里的小鱼    时间: 2012-2-16 19:46
mnisummer 发表于 2012-2-16 08:50
缓冲区是用来提高效率的。BufferedWriter中的读取方法其实是使用了FileWriter中的读取方法,所以要把FileWr ...

兄弟 能讲的在具体点吗
作者: 李杨    时间: 2012-2-16 20:20
既然这样那就杀人了!!!!!!!!

话说在公园200年的时候,一个名字叫小鱼的武林高手得了忧郁症。话说在200年的忧郁症都是这样的特征,武林高手去杀人,而杀死的人都表现为开心,大闹,疼痛,抽风等表现,死法太多,一些武林高手时刻都在想我是武林高手哇,我一剑你就得死,声都不能出,这才叫痛快。所以不想看到临死前的人有这么表现,而想看到一命呜呼的崇高死法,这就是200年的忧郁症了。


小鱼的病情已经到了晚期,后来有个名字叫 李仙儿的算命大师就出现了,他对小鱼说:

小鱼你别伤心了,有你李哥在,大师就说了,,就说了啊,,不是结巴啊。。小鱼你听好了。

要想那人死的快,容易啊 。。。我教你个招,这招让人一剑致命不死都不原谅自己的招数,这招叫做“装饰模式”, 此招可用在剑上,刀上,,就是刀枪棍棒,,斧钺钩叉上面都可以是使用此招,,记住了装饰模式。。

后来小鱼很高兴,大师您go on吧,大师你先去拿你的剑去杀个人我看你伸手如何,小鱼就拿着它宠爱的剑去杀人了,走着走着,唉,看到个人,先打声招呼,你好!只见小鱼伸手敏捷,一剑刺去,只见那人很开心的说你剑法不行啊,小鱼傻了,看那个人这么高兴,怎么回事啊,,过了1个小时,那人高兴过度死亡,死亡时间 200年一个阳光明媚的早晨。

后来小鱼不是很满意的说,李叔啊,那人头死很开心啊,还一度的嘲笑我。我说啊,小鱼你别着急,我现在就告诉你崇高的招数,装饰模式,我说这有瓶蒙汗药你擦在剑上,然后去杀人,小鱼听到了这招貌似可行,我试试看,小鱼在剑上擦了蒙汗药后又去杀人了,唉,看到了一个人,小鱼上来搭讪说,去哪啊?那人说我去的地方挺远的在西边就过那个山头就到了,这时小鱼指着树上说,看那是什么,那人一回头看树的瞬间小鱼一剑刺去,只见那人晕乎乎的走了几步说你这叫杀人吗,你到大点劲儿啊,小鱼傻了,看着那人,过了30分钟,那人说我睡一会啊,天黑你叫我,后天那人就睡过去了。。

小鱼还是不满说李叔啊,这招效率低啊,我说我这还有,这瓶你看,,这瓶是我用板蓝根+白开水+Coke研制而成,在深海里埋了70年才酿制成功,味道不错。给了小鱼,小鱼擦在了剑上,去杀人了,看到一头牛,哇塞,,呵呵,,你好壮啊。。小鱼匍匐到牛的身边,还假装牛叫,还向牛放了电,后来就在一瞬间,牛没有hold住,小鱼一剑刺去,只见牛好发无损的糖躺在了草地上,身上放这光芒。。

小鱼很高兴,说原来这就是装饰模式,

在剑上擦上多种强力毒药,毒性越来越强,杀人才high。装饰模式的威力就是大啊。。

过了9×9=81天出现了武林盟主,此人名字就做小鱼。。
作者: foxpeter    时间: 2012-2-16 20:28
毕向东老师基础课程第19天 有详细的讲这个问题和装饰设计模式 BufferedWriter只是起到装饰的作用,对FileWriter的功能实现加强。
就像手机套一样 , 可以使手机更美观,更强的保护, 但是你总要先有一个手机,才能用手机套套上去吧。
作者: 沙漠里的小鱼    时间: 2012-2-16 20:32
李杨 发表于 2012-2-16 02:23
FileWriter是向字符文件写入数据,BufferedWiter 是加以缓冲字符数据,

你问的第二个创建的流为什么不是 B ...

兄弟 能讲的在详细点吗
作者: 李杨    时间: 2012-2-16 21:28
我给你发,发不了了。说要通过审核。。。。
作者: 沙漠里的小鱼    时间: 2012-2-17 18:05
mnisummer 发表于 2012-2-16 08:50
缓冲区是用来提高效率的。BufferedWriter中的读取方法其实是使用了FileWriter中的读取方法,所以要把FileWr ...

兄弟 举个例子说明一下啊
作者: 黄锦成    时间: 2012-2-17 18:26
是从源码那里看到的,毕老师的视频那里有介绍,使用了装饰模式
作者: 黄锦成    时间: 2012-2-17 18:26
沙漠里的小鱼 发表于 2012-2-17 18:05
兄弟 举个例子说明一下啊

是从源码那里看到的,毕老师的视频那里有介绍,使用了装饰模式
作者: 郭繁森    时间: 2012-2-17 19:31
装饰类 BufferedWiter 功能也是写入数据故要继承Write,装饰后其功能增强了,构造方法中要传入一个写入流。
可以理解为  装饰类 (BufferedWiter)  的作用是为传入的 XX(fw) 增强的其功能的类,所以提前要传入一个流



PS:那第二个创建的流为什么不是 BufferedWiter fw =new  BufferedWiter("buf.txt") ; 为什么是BufferedWiter bufw =new  BufferedWiter(fw);

API中 BufferedWiter类的构造函数没有关联到文件("buf.txt") 的构造器,你理解错了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2