在Java的内存中进行字节和字符的数据类型相互转换非常常见,也有多种方法进行转换,在此处为大家一一介绍。
1. String
String类提供了转换到字节的方法,也提供了字节转换到字符的构造方法,代码入下所示:
String str = "这是一段字符串";
byte[] bytes = str.getBytes("UTF-8");
String newStr = new String(bytes, "UTF-8");
2.ByteToCharConverter & CharToByteConverter
这两个类分别提供converAll()方法实现字节和字符的转换,代码如下所示:
ByteToCharConverter charConverter = ByteToCharConverter.getConverter("UTF-8");
char[] c = charConverter.convertAll(byteArray);
CharToByteConverter byteConverter = CharToByteConverter.getConverter("UTF-8");
byte[] b = byteConverter.convertAll(c);
3.Charset
方法2中的两个类已经被Charset取代,Charset提供encode以及decode方法,分别对应char[]到byte[]的编码已经byte[]到char[]的编码,代码如下:
String str = "这是一段字符串";
Charset charset = Charset.forName("UTF-8");
ByteBuffer byteBuffer = charset.encode(str);
CharBuffer charBuffer = charset.decode(byteBuffer);
4.ByteBuffer
ByteBuffer提供char和byte之间的软转换,他们之间的转换不需要编码与解码,只是把一个16bit的char拆分成2个8bit的byte表示,他们的实际值并没有被修改,仅仅是数据的数据类型做了转换,代码如下:
ByteBuffer heapByteBuffer = ByteBuffer.allocate(1024);
ByteBuffer byteBuffer = heapByteBuffer.putChar(c);