当前位置: 技术问答>java相关
为什么i/o这么慢呢?
来源: 互联网 发布时间:2015-05-24
本文导语: 我做了一个写字板程序,把文件读到textarea中,我发现当读一个十几k的文件时 我得程序读的very slow;比notepad慢的多了,大家看看 try{ fin=new FileReader(filename); bfrin=new BufferedReader(fin); do { str=bfrin.readLine(); if(str!=null) ta...
我做了一个写字板程序,把文件读到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);
我得程序读的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);
|
优化一下,先把str + "n"加入到一个StringBuffer中,最后一次性添加到textarea中
StringBuffer s = new StringBuffer();
...
if(str!=null)
{
s.append(str);
s.append("n");
}
else
break;
...
ta.append(s.toString());
StringBuffer s = new StringBuffer();
...
if(str!=null)
{
s.append(str);
s.append("n");
}
else
break;
...
ta.append(s.toString());
|
简单字符串相加本来就很慢,使用StringBuffer的append可以避免新建String对象,重新分配内存空间;再者你对一个对象(textarea)多次进行append,效率很低。
|
我跟踪过append,也会新建String对象的!
|
除了用StringBuffer以外,
你尽量用InputStream,不要用Reader,这个慢。
另外,用本地byte[] 做缓冲比用Buffered.....快。
你尽量用InputStream,不要用Reader,这个慢。
另外,用本地byte[] 做缓冲比用Buffered.....快。
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。