Java:哪个具有更高的性能 - 用于将流推送到字符串?

问题描述 投票:0回答:2

我写了一个实用工具方法,将一些小数据从流写入String

哪种实现有更高的性能?

  1. 将所有数据写入字节数组,然后立即将所有数据转换为String

要么

  1. 将每个缓冲的部分转换为String并将它们连接起来。

实施1:

private String fileToString() throw ... {
    final byte[] buffer = new byte[bufLen];
    int n;

    final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    while ((n = fileInputStream.read(buffer)) != -1)
        byteArrayOutputStream.write(buffer, 0, n);

    return new String(byteArrayOutputStream.toByteArray(), "UTF-8");
}

实施2:

private String fileToString() throw ... {
    final byte[] buffer = new byte[bufLen];
    int n;

    final StringBuilder stringBuilder = new StringBuilder(aProperValue);
    while ((n = fileInputStream.read(buffer)) != -1)
        stringBuilder.append(new String(buffer, 0, n, "UTF-8"));

    return stringBuilder.toString();
}

编辑:

第二个实现不正确!我错了!请参阅下面的答案。

java string performance file inputstream
2个回答
1
投票

第二个实现是错误的。它在边界不起作用!感谢@JB Nizet和@Andrew Henle。看他们的评论。


0
投票

最好的方法是使用一些库。我试图自己解决同样的问题,但表现真的很慢。考虑使用CharStreams.toString库中的Guava,你会看到用肉眼提高性能。

© www.soinside.com 2019 - 2024. All rights reserved.