字符串与字节数组之间的转换

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在许多情况下,我们可能需要将字符串转换为字节数组,或者将字节数组转换为字符串。这可以通过使用字符集来实现。在本实验中,我们将学习如何使用几种不同的方法来完成这两种类型的转换。

使用 getBytes() 方法

String 类的 getBytes() 方法提供了一种便捷的方式来获取字节数组。String 类为 getBytes() 方法提供了三个重载版本。

String s = "demo!";
byte[] byteArr = s.getBytes();

使用 getBytes(String charsetName) 方法

import java.io.UnsupportedEncodingException;

String s = "demo!";
String namedCharset = "UTF-16";
byte[] byteArr = s.getBytes(namedCharset);

使用 getBytes(Charset charset) 方法

import java.nio.charset.Charset;
import java.util.Arrays;

String s = "demo!";
Charset charset = Charset.forName("UTF-16");
byte[] byteArr = s.getBytes(charset);

使用 Charset.encode() 方法

import java.nio.charset.StandardCharsets;

String s = "demo????????????";
Charset charset = StandardCharsets.ISO_8859_1;
byte[] byteArr = charset.encode(s).array();

使用 CharsetEncoder

import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;

String s = "demo????????????";
CharsetEncoder charsetEncoder = StandardCharsets.ISO_8859_1.newEncoder();
charsetEncoder.onMalformedInput(CodingErrorAction.IGNORE);
charsetEncoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
             .replaceWith(new byte[] {-121});
byte[] byteArr = charsetEncoder.encode(CharBuffer.wrap(s)).array();

使用 String 构造函数

byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, "UTF-16");

使用 Charset 实例

Charset charset = Charset.forName("UTF-16");
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, charset);

使用 Charset.decode() 方法

import java.nio.ByteBuffer;

Charset charset = StandardCharsets.UTF_16;
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33, -10};
String stringFromBytes = charset.decode(ByteBuffer.wrap(byteArr)).toString();

使用 CharsetDecoder

import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;

CharsetDecoder charsetDecoder = StandardCharsets.UTF_16.newDecoder();
charsetDecoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
              .onMalformedInput(CodingErrorAction.REPLACE)
              .replaceWith("*");
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33, -10};
String stringFromBytes = charsetDecoder.decode(ByteBuffer.wrap(byteArr)).toString();

运行代码

将你想要运行的代码复制到一个文件中,例如 ~/project/Conversion.java,然后在终端中运行以下命令:

javac Conversion.java && java Conversion

总结

总之,有多种方法可以将字符串转换为字节数组,或将字节数组转换为字符串。最方便的方法是使用 String 类的 getBytes() 方法生成字节数组,然后使用 String 类的构造函数从字节数组生成字符串。或者,我们可以使用 Charsets、CharsetEncoders 和 CharsetDecoders 来执行这些转换。

您可能感兴趣的其他 Java 教程