1. 方法简介

getBytes() 方法用于将 String 编码为字节数组。⚠️ 踩坑点:如果不指定字符集,会使用平台默认字符集编码,这在跨平台场景下可能导致乱码问题。

核心特性

  • ✅ 支持指定字符集编码
  • ✅ 提供三种重载方法
  • ❌ 默认字符集依赖平台环境

2. 方法签名

public byte[] getBytes()                    // 使用平台默认字符集
public byte[] getBytes(Charset charset)     // 指定Charset对象
public byte[] getBytes(String charsetName)  // 指定字符集名称

参数说明

参数类型 说明 示例值
无参数 使用JVM默认字符集 -
Charset Java NIO的字符集对象 StandardCharsets.UTF_8
String 字符集名称(需处理异常) "UTF-8"

3. 示例代码

@Test
public void whenGetBytes_thenCorrect() throws UnsupportedEncodingException {
    // 方式1:使用平台默认字符集
    byte[] byteArray1 = "abcd".getBytes();
    
    // 方式2:指定Charset对象(推荐)
    byte[] byteArray2 = "efgh".getBytes(StandardCharsets.US_ASCII);
    
    // 方式3:指定字符集名称(需捕获异常)
    byte[] byteArray3 = "ijkl".getBytes("UTF-8");
    
    // 预期结果
    byte[] expected1 = new byte[] { 97, 98, 99, 100 };
    byte[] expected2 = new byte[] { 101, 102, 103, 104 };
    byte[] expected3 = new byte[] { 105, 106, 107, 108 };
    
    // 验证结果
    assertArrayEquals(expected1, byteArray1);
    assertArrayEquals(expected2, byteArray2);
    assertArrayEquals(expected3, byteArray3);
}

最佳实践建议

  1. 优先使用Charset对象
    ✅ 避免字符串拼写错误
    ✅ 编译期检查字符集有效性
    ✅ 示例:StandardCharsets.UTF_8

  2. 避免使用平台默认字符集
    ❌ 可能导致跨平台不一致
    ❌ 示例:"你好".getBytes() 在Windows和Linux可能产生不同结果

  3. 异常处理
    ⚠️ 使用字符串参数时需处理 UnsupportedEncodingException
    ✅ 推荐用try-catch或throws声明

简单粗暴总结
想安全就用 getBytes(StandardCharsets.UTF_8)
想踩坑就用无参版本!