个性化阅读
专注于IT技术分析

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

本文概述

将字节数组转换为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 encoding
String 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" encoding
System.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 characters
byte[] byteArray1 = { 84, 69, 67, 72, 78, 79, 76, 79, 71, 89};	  //array of ASCII values 
String s = new String(byteArray);				//converts byteArray to String
String 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 code
String utf = new String(bytes, "UTF-8");			//converts into UTF-8 encoding
String cp1252 = new String(bytes, "Cp1252");	//conversts into Cp1252 endcoding
//converts into windows-1252 encoding
String 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

赞(0)
未经允许不得转载:srcmini » 如何在Java中将字节数组转换为String

评论 抢沙发

评论前必须登录!