A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

请问缓冲区BufferedOutputStream和内存区ByteArrayOutputStream有什么区别,什么情况下使用哪个?谢谢

2 个回复

倒序浏览
看了下源代码,感觉其实这两个类倒没必要比较,因为使用的最根本目的是不一样的。

BufferedOutputStream 的优势主要是针对不用缓冲区的一般输出流而言的,即减少读取到内存的次数,同时缓冲区大小固定,区满则清空,有效利用内存;


ByteArrayOutputStream的write方法并没有输出到输出流,而是为了得到一个保存了所有待输出字节的byte数组:缓冲区不断扩容,直到所有内容都读取到缓冲区中;至于之后对缓冲区的数据如何处理,是输出到输出流还是其他,并不关心。即我们在flush这个缓冲数组之前还可以对完整的数据进行处理而BufferedOutputStream
缓冲区保存的可能是部分数据。这样相较于BufferedOutputStream,可数据量大时可有效减少执行flush的次数,提供处理速度——但是牺牲了内存
总结 : 当你资源不足够用时,选择BufferedOutputStream是最佳的选择, 当你选择快速完成一个作业时,可以选择ByteArrayOutputStream之类的输出流
回复 使用道具 举报
zhouanqi 发表于 2016-2-28 22:57
看了下源代码,感觉其实这两个类倒没必要比较,因为使用的最根本目的是不一样的。

BufferedOutputStream  ...

非常感谢。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马