sb.append(line)加上去之后,明显变得非常卡,并且CPU占用率特别高?为什么

假设我需要通过Process来执行一个进程,并且需要把进程写入InputStream里面的东西进行读取并分析,并且假设这个进程会产生很多的字符串输出。假定这个进程是curl。

以下代码:

try {        // TODO add your handling code here:
        StringBuilder sb = new StringBuilder();
        ProcessBuilder pb = new ProcessBuilder("curl","http://www.sina.com.cn");    
        Process p = pb.start();
        InputStream is = p.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is),4096);
        String line = reader.readLine();        while(line != null){            //sb.append(line);
            line = reader.readLine();
        }
        this.jTextArea1.append(sb.toString());
    } catch (IOException ex) {            Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
    }

在速度上似乎没问题,但是将sb.append(line)加上去之后,明显变得非常卡,并且CPU占用率特别高。这是为什么呢?

临摹微笑
浏览 101回答 2
2回答

HUH函数

你这里面while(line != null) 可能跳不出来,他会一直是true。你试试看是不是这个问题?

一只名叫tom的猫

参考代码如下:InputStream is = null;try {     ...    is = p.getInputStream();    String text = IOUtils.toString(is, "GBK");    this.jTextArea1.append(text); } catch (...) {     ... } finally {     IOUtils.closeQuietly(is) }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java