http://community.csdn.net/Expert/topic/4681/4681395.xml?temp=.5135309
上面是我以前问的问题,关于读一个大的网络文件时速度太慢,后来一位朋友告诉我:s=s + String.valueOf(buffer); 
 这句有问题,效率低下。
你的s估计是String吧?
把s 改为StringBuffer,然后
把s=s + String.valueOf(buffer)改为s.append(buffer)
估计会快许多。
我就照着上面朋友说的,把s=s + String.valueOf(buffer)改为s.append(buffer)了,但是发现读取到的html代码中偶尔会包含一些乱码,数据一下变的没规则了,也就没办法分析。 用我原来的方法,虽然读取速度很慢,但是读到的文件html代码却很正确。 真不知道是什么原因了?

解决方案 »

  1.   

    我刚才试了试,一切正常,没有发现你说的问题啊!
    这是代码
    public class Test3 { public static void main(String[] args) {
    // TODO Auto-generated method stub
    URLConnection con = null;
    BufferedReader in = null;
    StringBuffer s = new StringBuffer();
    try {
    char[] buffer = new char[1024];
    URL u = new URL(
    "http://computing.unn.ac.uk/staff/cgpb2/web/Customers.html");
    con = u.openConnection();
    in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    while (in.read(buffer) != -1) {
    s.append(buffer);
    } in.close();
    FileWriter fw = new FileWriter(new File("F://del.txt"));
    fw.write(s.toString());
    } catch (Exception e) {
    System.out.println("页面读取失败!");
    e.printStackTrace();
    } }
    }
    另外,对你的程序提点个人意见:
    改写一下while(in.read(buffer) != -1)语句,这样效率是比较低的,应该利用int read(char[] cbuf, int off, int len) 方法进行读。
      

  2.   

    再补充两点:
    1 速度慢的瓶颈主要是网络带宽,而不是程序
    2 在关闭流之前要in.flush()一下