例子
将char数组转换为byte数组需要考虑编码方式的问题。如果使用ASCII编码的话,每个字符只需要一个字节,直接将char数组中的每个字符转换为byte即可;如果使用其他编码方式,可能会出现一个字符需要多个字节的情况。
下面是一个使用UTF-8编码转换的示例代码:
public static byte[] charToByte(char[] chars) {
Charset utf8 = Charset.forName("UTF-8");
CharBuffer charBuffer = CharBuffer.wrap(chars);
ByteBuffer byteBuffer = utf8.encode(charBuffer);
byte[] bytes = Arrays.copyOfRange(byteBuffer.array(), byteBuffer.position(), byteBuffer.limit());
Arrays.fill(byteBuffer.array(), (byte) 0);
return bytes;
}
该代码中,首先使用UTF-8编码方式创建一个Charset对象,然后将char数组包装成CharBuffer,再通过Charset对象将CharBuffer编码成ByteBuffer,最后将ByteBuffer转换为byte数组。
由于ByteBuffer中可能包含一些空字节,因此使用Arrays.copyOfRange将非空字节复制到新的byte数组中,最后将ByteBuffer中的内容清空。
需要注意的是,如果使用不同的编码方式,需要将创建Charset对象的参数修改为对应的编码方式名称。
或者
直接复制出 String 类中的底层实现。
参考资料
https://juejin.cn/s/char%E6%95%B0%E7%BB%84%E8%BD%ACbyte%E6%95%B0%E7%BB%84