使用 getBytes(encoding) 方法在Java中将字符串转换为字节数组
在Java中,双引号内的任何字符序列都被视为字符串字面量。 字符串字符字面量。字符串类存在于Java .lang 包中。 Java中的所有字符串字面量都是不可变的,即它们的值一旦创建就无法更改。在Java中,字符串字面量存储为 Unicode字符数组。字节数组是字节数组。我们可以使用字节数组来存储二进制数据的集合。
为了将字符串字面量转换为字节数组,我们必须首先将字符序列转换为字节序列,对于这种转换,我们可以使用Charset 的实例。
它是一个抽象类,存在于 Java.nio 包,它用于定义十六位UTF-16代码单元序列之间的映射,即字符序列和字节序列。基本上主要用于charset和unicode的编解码。我们上面讨论的将字符串字面量转换为字节数组的过程被定义为编码,其中我们将字符串字面量的每个字符编码为一个字节。
句法:
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
此方法使用命名字符集将字符串字面量编码为字节并返回字节数组,但如果不支持命名字符集,此方法可能会抛出 UnsupportedEncodingException。所以为了处理异常,我们使用 try-catch 块。
方法:
- 在下面的程序中 获取字节() 方法通过使用 UTF-16(16 是位数)编码常量将字符串字面量转换为字节。
- 其中 UTF 是 Unicode 转换格式,用于对字符进行编码。 UTF 有很多变体,例如 UTF-8,它在编码字符时至少使用 1 个字节,其中 UTF-16 使用 2 个字节,UTF-32 使用 4 个字节。
- 在下面的程序中,我们使用 UTF-16,它至少需要 2 个字节来编码一个字符,即为什么结果字节数组的长度与给定字符串的长度不同。但是如果你使用 UTF-8,你得到的结果数组的长度与输入字符串的长度相同,因为 UTF-8 需要一个字节来编码一个字符。
Java
// Java program to Convert String to Byte Array
// Using getBytes(encoding)
import java.io.*;
import java.lang.*;
import java.nio.*;
import java.nio.charset.Charset;
import java.util.*;
// class to convert string literal into byte array
class GFG {
public static void main(String[] args)
{
// using try-catch to handle the exception
try {
// taking unput string
String s = "GeeksForGeeks";
// name of supported charset
// UTF-16 is an encoding constant
String charsetName = "UTF-16";
// UTF-16 charset encoding and storing the
// resultant bytearray.
byte[] byteArray = s.getBytes("UTF-16");
// printing the byte array to convert it into
// string
System.out.println(Arrays.toString(byteArray));
// printing the length of input string and
// resultant byte array
System.out.println("Length of String"
+ " " + s.length() + " "
+ "Length of byte Array"
+ " " + byteArray.length);
}
catch (UnsupportedEncodingException e) {
System.out.println("Unsupported cahrset :" + e);
}
}
}
输出
[-2, -1, 0, 71, 0, 101, 0, 101, 0, 107, 0, 115, 0, 70, 0, 111, 0, 114, 0, 71, 0, 101, 0, 101, 0, 107, 0, 115]
Length of String 13 Length of byte Array 28