杰瑞科技汇

Java字符串如何转byte数组?

使用 `String.getBytes()(默认编码)

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

注意

Java字符串如何转byte数组?-图1
(图片来源网络,侵删)
  • 默认编码取决于 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 填充剩余部分:

Java字符串如何转byte数组?-图2
(图片来源网络,侵删)
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));
    }
}

关键注意事项

  1. 编码一致性

    • 字节数组转回字符串时,必须使用相同的编码,否则会出现乱码。
    • new String(bytes, StandardCharsets.UTF_8)
  2. 异常处理

    • 如果使用 String.getBytes(String),需捕获 UnsupportedEncodingException(但 UTF-8 是 Java 标准支持的编码,实际很少抛出异常)。
  3. 性能优化

    • 高频操作时,可复用 Charset 对象(如 StandardCharsets.UTF_8 是静态常量)。

反向操作:字节数组转字符串

byte[] bytes = "Hello".getBytes(StandardCharsets.UTF_8);
String str = new String(bytes, StandardCharsets.UTF_8);

通过合理选择编码和方法,可以确保字符串与字节数组转换的正确性和跨平台兼容性。

分享:
扫描分享到社交APP
上一篇
下一篇