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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小飞龙 初级黑马   /  2012-7-19 16:26  /  1703 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在String型数据的存储中有StringBuffer,,在IO中也出现了Buffer体系,可见缓冲的高效性,,谁能给小弟
简单说一下,这个缓冲是怎么实现高效的啊

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

3 个回复

倒序浏览
字符串其实就是一个char型的数组。而String实现内部是一个不可变的 final char[] 长度等于字符串的长度,字符串对象一旦产生就不可以修改,java的操作符+在连接字符串时被重写,每2个字符串用+号连接一次都会产生一个新的长度等于连接字符串长度之和final char[]为内部实现的新的对象,同样不可修改。每次用+连接都会这样的操作,可想而知如果大量使用+性能消耗就会很大。

而StringBuffer实现的是一个一个可变的 char[] 默认的构造方法是长度为16的数组,如果当前StringBuffer通过append方法加入一个字符串,会先将其加入到char[]数组当中,只用当长度超过了char[]的长度才会先产生一个新的长度更长的char[]将旧的char[] 数据先复制到新的char[] 中再将字符串放入其中,这样一对比就可以看出来,在进行大量字符串连接的时候 StringBuffer有性能上面的优势。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
IO流中缓冲区的出现是为了提高效率的,打个比方,比如你喝水,如果一滴一滴的喝,是不是效率很低啊?,不爽啊,但是如果你拿个杯子接满水一饮而尽,是不是很爽?,那个杯子就是个缓冲作用,在java里就是利用缓冲区临时存储对象从而提高效率的目的,为了提高读写效率,在java 中定义了两个字符流的缓冲区对象:
1.BufferedWriter(写入数据对象):将文本写入字符输出流,缓冲各个
字符、数组和字符串的高效写入。
2.BufferedReader(读取数据对象):从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
字节流缓冲区的两个对象:
1.BufferedInputStream:在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。
2.BufferedOutputStream:该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。
这里用代码演示一下吧(写入数据到文本buf.txt中):

P1~GO$J(6J@$VS8N%Y$)EHS.jpg (118.61 KB, 下载次数: 8)

P1~GO$J(6J@$VS8N%Y$)EHS.jpg

0D_5F0R9I{NV5)D5P6EM03Q.jpg (104.67 KB, 下载次数: 14)

从文本文件buf.txt文件中读取数据的代码演示

从文本文件buf.txt文件中读取数据的代码演示

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
简单理解是靠数组里达到缓冲的效果的,而底层真正的实现方式,需要看源码……

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

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