因此,我在我的(诚然非常简单的)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();
}
我怎样才能让它更快? (是的,我确实需要字符串,不,InputStrings 没有那么大,不,这个方法的调用频率低于程序中的大多数方法,不,我没有办法避免这种需要转换。)
最佳答案
好吧,这就是所有 I/O 发生的地方(我假设探查器包括 readLine() 等待数据进入的所有时间)。您可以做的唯一显而易见的事情是使用足够大的缓冲区预初始化 StringBuilder,这样它就不必重新分配内存,但我认为读取数据所花费的时间会使一切都变得微不足道。
除此之外 - 您受 I/O 限制。通过网络接收数据只是需要时间。
编辑:也可以包括 casablanca 的评论:与其逐行阅读然后添加换行符,不如使用一个简单的阅读器,您提供一个相当大的缓冲区,然后分块阅读所有内容。无需逐行阅读,因为您似乎只是复制了整个输入数据。手动逐行进行的唯一原因是,如果您想将换行符(如 \r\n
)规范化为标准的 \n
。
关于java - 高效的输入流到java中的字符串方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4288559/