因此,我在Java上运行了一个探测器(不可否认的是非常简单)应用程序,并且惊讶于仅次于需要按时间发出HTTP请求的inputStreamToString方法是我的方法.它目前定义如下:
public static String inputStreamToString(InputStream in) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
in.close();
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它更快?(是的,我确实需要字符串,不,输入字符串不是那么大,不,这个方法被调用的次数比程序中的大多数方法都要少,不,我没有办法避免这种需要转换.)
好吧,这就是所有I/O发生的地方(我假设分析器包括readLine()等待数据进入的所有时间).你可以做的唯一显而易见的事情是使用足够大的缓冲区预先初始化StringBuilder,这样它就不必重新分配内存,但我认为一切都因读取数据所需的时间而相形见绌.
除此之外 - 你是I/O绑定的.通过网络接收数据只需要时间.
编辑:也可以包括卡萨布兰卡的评论:你可以使用一个简单的阅读器和一个相当大的缓冲区,而不是逐行阅读然后添加换行符,只是阻止读取所有内容.因为您似乎只是复制整个输入数据,所以无需逐行读取.手动逐行的唯一原因是,如果您想将新行(例如\r\n)标准化为标准\n.