如何在Java中将字节数组转换为String

本文概述

  • 通过使用字符串类构造函数
  • 通过使用UTF-8编码
将字节数组转换为String的过程称为解码。此过程需要一个字符集。虽然, 我们应该使用字符集来解码字节数组。
有两种方法可以将字节数组转换为字符串:
  • 通过使用String类构造函数
  • 通过使用UTF-8编码
通过使用字符串类构造函数 将字节数组转换为String的最简单方法是, 我们可以将String类构造函数与byte []作为构造函数参数一起使用。
String str=new String(bytes);


下面的示例不使用任何字符编码。
public class ByteArraytoStringExample{public static void main(String args[]) {try{byte[] bytes = "hello world".getBytes(); //creates a string from the byte array without specifying character encodingString s = new String(bytes); System.out.println(s); }catch(Exception e){e.printStackTrace(); }}}

输出:
如何在Java中将字节数组转换为String

文章图片
通过使用UTF-8编码 在将字节数组转换为String时, 请记住字符编码。由于字节是二进制数据, 而字符串是字符数据。重要的是要知道从中创建字节数组的文本的原始编码。当我们使用不同的字符编码时, 我们不会取回原始字符串。
假设我们必须从以“ ISO_8859_1”编码的文件中读取字节数组。将字节数组转换为字符串时, 我们没有任何字符编码。我们使用String类构造函数将字节数组转换为String, 但不能保证我们将获得相同的文本。这是因为String类的构造函数使用平台的默认编码。
字节保存8位, 最多可以包含256个不同的值。它适用于仅使用七个位的ASCII字符集。如果字符集具有超过256个值, 则应明确指定编码, 该编码告诉你如何将字符编码为字节序列。
Java平台支持以下字符集:
  • StandardCharsets.ISO_8859_1
  • 标准字符集
  • 标准字符集.UTF_16
  • 标准字符集.UTF_16BE
  • 标准字符集.UTF_16LE
当我们不记得确切的编码时, 在这种情况下, 我们的平台将无法正确转换那些特殊字符。通过提供“ UTF-8”作为字符编码来解决此问题。 Java在String类中提供了另一个重载的构造函数, 该构造函数接受字符编码。
new String(byte[], "character encoding");


在下面的示例中, 我们使用StandardCharset.UTF_8指定编码。
import java.io.IOException; import java.nio.charset.StandardCharsets; public class ByteArraytoStringExample1{public static void main(String[] args) { try{ byte[] b = "Morning".getBytes(StandardCharsets.UTF_8); //byte array String string = new String(b, StandardCharsets.UTF_8); //string with "UTF-8" encodingSystem.out.println(string); }catch(Exception e){e.printStackTrace(); }}}

输出:
如何在Java中将字节数组转换为String

文章图片

在下面的示例中, 我们在创建字节数组时采用了char。由于自动装箱, 它可以工作。 char’ T’ 在字节数组中被转换为84, 依此类推。这就是两个字节数组的输出相同的原因。
public class ByteArraytoStringExample2{public static void main(String[] args) {byte[] byteArray = { 'T', 'E', 'C', 'H', 'N', 'O', 'L', 'O', 'G', 'Y'}; //byte array of charactersbyte[] byteArray1 = { 84, 69, 67, 72, 78, 79, 76, 79, 71, 89}; //array of ASCII values String s = new String(byteArray); //converts byteArray to StringString str = new String(byteArray1); System.out.println(s); System.out.println(str); }}

输出:
如何在Java中将字节数组转换为String

文章图片
String类还有一个构造函数, 我们可以在其中传递字节数组和Charset作为参数。因此, 以下语句也可以用于在Java中将字节数组转换为String。
String str = new String(byteArray, StandardCharsets.UTF_8)

String类还具有一个构造函数, 可将字节数组的子集转换为String。
String(byte[] bytes, int offset, int length, String charsetName)

让我们看另一个使用不同编码的例子。

import java.io.UnsupportedEncodingException; public class ByteArraytoStringExample3{public static void main(String args[]){try{byte[] bytes = new byte[] { 75, 69, 82, 115, 121, 90, 43, 98, -30}; //bytes in ASCII codeString utf = new String(bytes, "UTF-8"); //converts into UTF-8 encodingString cp1252 = new String(bytes, "Cp1252"); //conversts into Cp1252 endcoding//converts into windows-1252 encodingString windows1252 = new String(bytes, "Windows-1252"); System.out.println("String in UTF-8 encoding : " + utf); System.out.println("String in Cp1252 encoding : " + cp1252); System.out.println("string Windows-1252 encoding : " + windows1252); }catch(Exception e){e.printStackTrace(); }}}

【如何在Java中将字节数组转换为String】输出:
如何在Java中将字节数组转换为String

文章图片

    推荐阅读