使用 `String.getBytes()(默认编码)
String str = "Hello, 世界"; byte[] bytes = str.getBytes(); // 使用 JVM 默认字符编码(可能不安全)
注意:

(图片来源网络,侵删)
- 默认编码取决于 JVM 的环境(如系统属性
file.encoding),在不同环境下可能不同,导致跨平台问题。 - 不推荐在生产环境中使用,除非明确知道默认编码符合需求。
使用 String.getBytes(String charsetName)(指定编码)
推荐显式指定编码(如 UTF-8),确保一致性:
String str = "Hello, 世界";
try {
byte[] bytes = str.getBytes("UTF-8"); // 指定 UTF-8 编码
// 或使用 StandardCharsets.UTF_8(Java 7+)
// byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
优点:
- 明确编码,避免环境差异导致的问题。
StandardCharsets(Java 7+)提供预定义的常量,无需处理异常。
使用 Charset 类(Java 5+)
import java.nio.charset.Charset;
String str = "Hello, 世界";
byte[] bytes = str.getBytes(Charset.forName("UTF-8"));
使用 String.getBytes(StandardCharsets)(Java 7+)
最推荐的方式,简洁且安全:
import java.nio.charset.StandardCharsets; String str = "Hello, 世界"; byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
特殊场景:按固定长度填充字节数组
如果需要固定长度的字节数组(如加密或网络传输),可以用 Arrays.fill 填充剩余部分:

(图片来源网络,侵删)
import java.util.Arrays; String str = "Hello"; byte[] bytes = new byte[10]; // 目标长度为 10 System.arraycopy(str.getBytes(StandardCharsets.UTF_8), 0, bytes, 0, str.getBytes().length); Arrays.fill(bytes, str.getBytes().length, bytes.length, (byte) 0); // 填充剩余部分为 0
完整示例代码
import java.nio.charset.StandardCharsets;
public class StringToBytes {
public static void main(String[] args) {
String str = "Hello, 世界";
// 方法1:默认编码(不推荐)
byte[] bytes1 = str.getBytes();
// 方法2:指定编码(推荐)
byte[] bytes2 = str.getBytes(StandardCharsets.UTF_8);
// 方法3:使用 Charset 类
byte[] bytes3 = str.getBytes(StandardCharsets.UTF_8);
// 打印结果
System.out.println("默认编码: " + Arrays.toString(bytes1));
System.out.println("UTF-8编码: " + Arrays.toString(bytes2));
System.out.println("UTF-8编码: " + Arrays.toString(bytes3));
}
}
关键注意事项
-
编码一致性:
- 字节数组转回字符串时,必须使用相同的编码,否则会出现乱码。
new String(bytes, StandardCharsets.UTF_8)。
-
异常处理:
- 如果使用
String.getBytes(String),需捕获UnsupportedEncodingException(但 UTF-8 是 Java 标准支持的编码,实际很少抛出异常)。
- 如果使用
-
性能优化:
- 高频操作时,可复用
Charset对象(如StandardCharsets.UTF_8是静态常量)。
- 高频操作时,可复用
反向操作:字节数组转字符串
byte[] bytes = "Hello".getBytes(StandardCharsets.UTF_8); String str = new String(bytes, StandardCharsets.UTF_8);
通过合理选择编码和方法,可以确保字符串与字节数组转换的正确性和跨平台兼容性。
