Java中字符串与byte数组之间的相互转换是经常使用的操作,下面是完整攻略:
字符串转byte数组
将字符串转换为byte数组可以通过以下两种方式实现:
1.使用String类的getBytes()方法
String str = "hello, world!";
byte[] bytes = str.getBytes();
这里的getBytes()方法会将字符串转换为默认字符集的byte数组。如果需要指定字符集可以传入参数,例如:
byte[] bytes = str.getBytes("UTF-8");
2.使用Charset类的encode()方法
String str = "hello, world!";
Charset charset = Charset.defaultCharset();
ByteBuffer buffer = charset.encode(str);
byte[] bytes = buffer.array();
这里的encode()方法也会将字符串转换为byte数组,但是可以通过Charset类来指定字符集。
byte数组转字符串
将byte数组转换为字符串可以通过以下两种方式实现:
1.使用String类的构造方法
byte[] bytes = new byte[]{104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33};
String str = new String(bytes);
这里使用String类的构造方法,传入byte数组作为参数。
2.使用Charset类的decode()方法
byte[] bytes = new byte[]{104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33};
Charset charset = Charset.defaultCharset();
ByteBuffer buffer = ByteBuffer.wrap(bytes);
String str = charset.decode(buffer).toString();
这里使用Charset类的decode()方法来将byte数组转换为字符串。需要先将byte数组包装成ByteBuffer对象,再调用decode()方法转换成字符串。
示例说明
示例1:字符串转byte数组
String str = "中文字符串";
byte[] bytes = str.getBytes("UTF-8");
System.out.println(Arrays.toString(bytes));
输出结果为:
[-28, -72, -83, -26, -106, -121, -25, -67, -91, -28, -72, -85, -27, -101, -67, -27, -118, -104]
可以看到,由于"中文字符串"不是ASCII码,因此使用UTF-8编码得到的byte数组是负数。
示例2:byte数组转字符串
byte[] bytes = new byte[]{-28, -72, -83, -26, -106, -121, -25, -67, -91, -28, -72, -85, -27, -101, -67, -27, -118, -104};
Charset charset = Charset.forName("UTF-8");
String str = new String(bytes, charset);
System.out.println(str);
输出结果为:
中文字符串
可以看到,使用指定的UTF-8编码将byte数组转换为字符串后,字符串的值正好是原来的"中文字符串"。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中字符串与byte数组之间的相互转换 - Python技术站