java - 高效的输入流到java中的字符串方法

标签 java optimization

因此,我在我的(诚然非常简单的)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/

相关文章:

java - 如何使用glide将图像放入ImageView

java - 架构建议 : Grails and Video Content

Java 断路器在请求线程中运行

java - 我可以使用超过 32 GB 的堆和压缩 oops

Python gc.collect 几乎占用了 django api 调用的所有时间

java - Cargo-Maven2-Plugin 找不到 Tomcat/lib 目录

java - 使用 eclipse 在 java 中使用 windows 应用程序

静态函数可以比非静态函数更快吗?

java - 在ArrayBlockingQueue中,为什么将final成员字段复制到本地final变量中?

sql - 优化广泛使用 IN 子句的 Oracle SQL 查询