如何在 Java 中将字节数组转换为字符串?

2024年10月23日 | 阅读 6 分钟

将字节数组转换为字符串的过程称为解码。此过程需要一个字符集。尽管如此,我们应该使用字符集来解码字节数组。

有两种方法可以将字节数组转换为字符串

  • 通过使用String 类构造函数
  • 通过使用UTF-8 编码

使用 String 类构造函数

将字节数组转换为字符串的最简单方法是使用带有 byte[] 作为构造函数参数的 String 类构造函数。

示例

以下示例不使用任何字符编码。

文件名:ByteArraytoStringExample.java

输出

How to convert byte array to String in Java

使用 UTF-8 编码

在将字节数组转换为字符串时,请记住字符编码。因为字节是二进制数据,而字符串是字符数据。了解创建字节数组的文本的原始编码很重要。当我们使用不同的字符编码时,我们无法恢复原始字符串。

假设我们必须从一个以“ISO_8859_1”编码的文件中读取字节数组。在将字节数组转换为字符串时,我们没有使用任何字符编码。我们通过使用 String 类构造函数将字节数组转换为字符串,但它不保证我们能获得相同的文本。这是因为 String 类的构造函数使用平台的默认编码。

字节包含 8 位,最多可以有 256 个不同的值。对于只使用七位的 ASCII 字符集,这是适用的。如果字符集有超过 256 个值,我们应该显式指定编码,它会告诉我们如何将字符编码为字节序列。

Java 平台支持的字符集如下:

  • StandardCharsets.ISO_8859_1
  • StandardCharsets.US_ASCII
  • StandardCharsets.UTF_16
  • StandardCharsets.UTF_16BE
  • StandardCharsets.UTF_16LE

当记不清确切的编码时,在这种情况下,我们的平台无法正确转换这些特殊字符。通过提供“UTF-8”作为字符编码可以解决此问题。Java 在 String 类中提供了另一个重载构造函数,该构造函数接受字符编码。

示例

在下面的示例中,我们使用了StandardCharset.UTF_8 来指定编码。

文件名:ByteArraytoStringExample1.java

输出

How to convert byte array to String in Java

示例

在下面的示例中,我们在创建字节数组时使用了字符。由于自动装箱,这是有效的。字符 'T' 被转换为字节数组中的相应 ASCII 码,即 84,依此类推。这就是为什么两个字节数组的输出相同。

文件名:ByteArrayToStringExample2.java

输出

How to convert byte array to String in Java

String 类还提供了一个构造函数,我们可以将字节数组和 Charset 作为参数传递给它。因此,下面的语句也可以用于在 Java 中将字节数组转换为字符串。

String 类还提供了一个构造函数来转换字节数组的子集为字符串。

让我们通过另一个示例看看使用了不同的编码。

示例

文件名:ByteArraytoStringExample3.java

输出

How to convert byte array to String in Java

一种常见的方法是使用接受字节数组作为参数的String 类构造函数。此构造函数通过使用平台的默认字符编码解码字节来创建一个新字符串。例如,如果字节数组代表字符的 ASCII 值,则此方法效果很好。但是,对于 UTF-8 等其他编码,后者更常用于处理 Unicode 字符,建议显式指定字符集。

另一种方法是使用接受字节数组和Charset 对象的String 构造函数。此方法允许您显式指定字符编码,确保字节被正确解码。例如,要使用 UTF-8 编码将字节数组转换为字符串,您需要将StandardCharsets.UTF_8 作为 charset 参数传递。

使用StringBuilder 是将字节数组转换为字符串的另一种选择。此方法涉及迭代数组中的每个字节,将其转换为char,然后将其追加到StringBuilder。当您需要对字符串的构造进行更多控制时,或者当您想在将字节转换为字符之前对其进行操作时,此方法可能很有用。

让我们通过一个 Java 示例程序来详细理解。

文件名:ByteArraytoString.java

输出

Method 1: Using String constructor - Hello World
Method 2: Using String constructor with Charset - Hello World
Method 3: Using StringBuilder - Hello World

这是将 Java 中的字节数组转换为字符串所需的解释。


下一个主题Java 教程