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);
}
最佳实践建议
优先使用Charset对象
✅ 避免字符串拼写错误
✅ 编译期检查字符集有效性
✅ 示例:StandardCharsets.UTF_8
避免使用平台默认字符集
❌ 可能导致跨平台不一致
❌ 示例:"你好".getBytes()
在Windows和Linux可能产生不同结果异常处理
⚠️ 使用字符串参数时需处理UnsupportedEncodingException
✅ 推荐用try-catch或throws声明
简单粗暴总结:
想安全就用getBytes(StandardCharsets.UTF_8)
,
想踩坑就用无参版本!