让我们假设我刚刚使用BufferedInputStream将UTF-8编码文本文件的字节读入字节数组。我知道我可以使用下面的例程将字节转换为字符串,但是是否有一种更有效/更聪明的方法来做到这一点,而不仅仅是遍历字节并转换每个字节?

public String openFileToString(byte[] _bytes)
{
    String file_string = "";

    for(int i = 0; i < _bytes.length; i++)
    {
        file_string += (char)_bytes[i];
    }

    return file_string;    
}

当前回答

我用这种方法

String String = new String(_bytes, 0, numBytes);

其他回答

String有一个构造函数,以字节[]和charsetname作为参数:)

这也涉及到迭代,但这比连接字符串好得多,因为它们非常非常昂贵。

public String openFileToString(String fileName)
{
    StringBuilder s = new StringBuilder(_bytes.length);

    for(int i = 0; i < _bytes.length; i++)
    {
        s.append((char)_bytes[i]);
    }

    return s.toString();    
}

为此,您可以使用String(byte[] bytes)构造函数。详情请参见此链接。 你还必须考虑你的平台的默认字符集,根据java文档:

使用解码指定的字节数组来构造新的String 平台的默认字符集。新字符串的长度是a 函数的字符集,因此可能不等于长度 字节数组。当给定字节时,此构造函数的行为 在未指定的默认字符集中无效。的 类时,应该使用CharsetDecoder类 解码过程是必需的。

我用这种方法

String String = new String(_bytes, 0, numBytes);

查看String的构造函数

String str = new String(bytes, StandardCharsets.UTF_8);

如果你觉得很懒,你可以使用Apache Commons IO库直接将InputStream转换为字符串:

String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);