为什么i/o这么慢呢?

starry 2002-05-05 09:43:26
我做了一个写字板程序,把文件读到textarea中,我发现当读一个十几k的文件时
我得程序读的very slow;比notepad慢的多了,大家看看
try{
fin=new FileReader(filename);
bfrin=new BufferedReader(fin);
do
{
str=bfrin.readLine();
if(str!=null)
ta.append(str+"\n");
else
break;
}
while (true);
...全文
65 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
马行空牛耕田 2002-05-08
  • 打赏
  • 举报
回复
“ 我跟踪过append,也会新建String对象的!”
我想,即便有新建,JDK也会对之进行优化的! :)
wangwenyou 2002-05-08
  • 打赏
  • 举报
回复
你并没有重复创建StringBuffer,自始至终,只有一个StringBuffer对象
oscarjiao 2002-05-08
  • 打赏
  • 举报
回复
那我如果想在循环里不每次重新分配空间,用append反复建立StringBuffer的对象,那么怎么实现该对象在每次循环尾的清空呢?
hccpro 2002-05-07
  • 打赏
  • 举报
回复
除了用StringBuffer以外,

你尽量用InputStream,不要用Reader,这个慢。

另外,用本地byte[] 做缓冲比用Buffered.....快。
wangwenyou 2002-05-07
  • 打赏
  • 举报
回复
StringBuffer应该只新建了一个对象,以后在append时不必与+一样要重新分配内存空间了。
wangwenyou 2002-05-07
  • 打赏
  • 举报
回复
不至于吧?我没仔细去看过String的实现,不过据说它是用StringBuffer实现的;总之,StringBuffer确实比String高效。
oscarjiao 2002-05-07
  • 打赏
  • 举报
回复
我跟踪过append,也会新建String对象的!
wangwenyou 2002-05-05
  • 打赏
  • 举报
回复
简单字符串相加本来就很慢,使用StringBuffer的append可以避免新建String对象,重新分配内存空间;再者你对一个对象(textarea)多次进行append,效率很低。
wangwenyou 2002-05-05
  • 打赏
  • 举报
回复
优化一下,先把str + "\n"加入到一个StringBuffer中,最后一次性添加到textarea中
StringBuffer s = new StringBuffer();
...
if(str!=null)
{
s.append(str);
s.append("\n");
}
else
break;
...
ta.append(s.toString());

62,612

社区成员

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

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