急!!!FileOutputStream,OutputStreamWriter, BufferedWriter为什么连用?

sAS112UUUYY111 2010-03-19 04:25:20
FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"MS936");
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);

如果只用FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt");
不是也能输出到"d:/text.txt"吗?
为什么要用其它两个呢?能起到什么作用呢?


---------------------------------------------------------
...全文
999 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
gmh521 2010-03-23
  • 打赏
  • 举报
回复
FileOutputStream 是字节流
BufferedWriter 是字符流
想下哪个效率更高?
Buffered。。。 是缓冲流。
最优的办法就是三个合起来用。
y11111494 2010-03-23
  • 打赏
  • 举报
回复
帮助啊地对地导弹点点滴滴
y11111494 2010-03-23
  • 打赏
  • 举报
回复
前来帮助
sAS112UUUYY111 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dinghun8leech 的回复:]
装饰模式
[/Quote]

什么意思?
sAS112UUUYY111 2010-03-23
  • 打赏
  • 举报
回复
都有道理,哪位说的更合理呢?
dinghun8leech 2010-03-22
  • 打赏
  • 举报
回复
装饰模式
bayougeng 2010-03-22
  • 打赏
  • 举报
回复
TO 10楼:
不是所有的文件都是用来记录字符的。
如果你将一个Object保存到硬盘上,那么这个文件只能是一个字节文件。而不是字符文件。
所以Stream的目的并不是你想到的那样。

FileReader这个才是专门用来读字符文件的。
之所以有时候不用FileReader而用FileInputStream和InputStreamReader来代替,是因为需要做编码转换。
InputStreamReader有一个很重要的指定转换编码的功能。
「已注销」 2010-03-22
  • 打赏
  • 举报
回复
FileOutputStream 是字节流,它一个字节一个字节的向外边送数据
OutputStreamWrite是字符流,它一个字符一个字符的向外边送数据
它们有什么区别么?
因为计算机是洋鬼子发明的,它们的英文字符占一个字节,而我们的中文是一个字符,占俩字节。
如果用stream,你读出来的英语再倒也罢了,读出来的中文可就是乱码或者一个个“????”。
如果你用WRITER,就不会有乱码了,明白?

BufferedWriter Buffer是一个缓冲区,为什么要用BUFFER呢?
如果你直接用stream或者writer,你的硬盘可能就是一个字符或者一个字节 读写硬盘一次,
可是你用了Buffer,你的硬盘就是读了一堆数据之后,读写一下硬盘。这样对你硬盘有好处。

打个比方说:你要喝水,你是一滴一滴的喝呢,还是一杯一杯的喝呢?stream,wirter就相当一滴,buffer就相当一个杯子。
charles361 2010-03-22
  • 打赏
  • 举报
回复
向文件里写入字节流,第二句将字符流转换成字节流,第三句是使用缓冲。
Ark032425 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wzju64676266 的回复:]
引用楼主 sas112uuuyy111 的回复:
FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"MS936");
BufferedW……
[/Quote]
有理
sAS112UUUYY111 2010-03-22
  • 打赏
  • 举报
回复
蛮有道理的
  • 打赏
  • 举报
回复
我的了解就是,把字节流转成字符流。。。。其他的也同问!
wy19280469 2010-03-22
  • 打赏
  • 举报
回复
因为它是一句装饰模式设计的 , 一个功能满足不了需求
dfa34fg 2010-03-22
  • 打赏
  • 举报
回复
智鹿软件 2010-03-22
  • 打赏
  • 举报
回复
lz要查一下API里面的构造方法,这在构造方法里面都有啊!

BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
// 将原来的流变的带缓冲了
sAS112UUUYY111 2010-03-22
  • 打赏
  • 举报
回复
编码转换是做什么的?
sAS112UUUYY111 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bayougeng 的回复:]
TO 10楼:
不是所有的文件都是用来记录字符的。
如果你将一个Object保存到硬盘上,那么这个文件只能是一个字节文件。而不是字符文件。
所以Stream的目的并不是你想到的那样。

FileReader这个才是专门用来读字符文件的。
之所以有时候不用FileReader而用FileInputStream和InputStreamReader来代替,是因为需要做编码转换。
Input……
[/Quote]


????????????????
poFate 2010-03-19
  • 打赏
  • 举报
回复
就是在字符和字节之间桥接一下吧
nanapoleon 2010-03-19
  • 打赏
  • 举报
回复
我想重点在MS936吧,这个流应该是用这个编码方式来写文件的,然后再用BufferdWriter包装一下,加快写的速度。
wzju64676266 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 sas112uuuyy111 的回复:]
FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"MS936");
BufferedWriter bufferedWriter = new……
[/Quote]

这样包装有两个目的:
1、为了使用更好的接口,FileOutputStream 类可能有些方法在该需求中并不好用,改BufferedWriter 可能更符合需求
2、为了加快程序的读写速度、使用缓冲进行包装,这有好几种包装法,你可以测试一下每种性能差异

其它的什么作用我暂时还没想到:)
加载更多回复(3)

62,636

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧