关于String和byte数组之间的转化问题
上次在项目中遇到了这样的一个问题,我从接口取到的rawData数组的长度是8192,
我将这个byte数组用new String(rawwData)的方法将byte数组转化为字符串,作为参数传给另外的一个方法,
在这个方法中,将这个String又转化为了数组,这个时候的数组大小变成了30000多,当然传进来的String大小为8192
所以可以确定是str.getBytes(encoding),这个地方的错误。原因是编码的问题,是因为utf-8可以将一个字节变成了1-4字节,
因为java的默认方法就是utf-8,因此我们为避免出错,应该选用iso-8859-1的编码方式。
接下来,我们来看两个例子:
默认的方式:
public static void main(String[] args) {
byte[] bytes = new byte[] { 50, 0, -1, 28, -24 };
try {
//"ISO-8859-1"
String sendString=new String( bytes );
System.out.println(sendString);
byte[] Mybytes=sendString.getBytes();
for (int i = 0; i <Mybytes.length ; i++) {
System.out.print(Mybytes[i]+" ");
}
} catch (Exception e) {
e.printStackTrace();
}
运行结果:

我们可以看到,原来byte数组里面只有5字节,经过一系列的转化之后,变成了9字节,我们还发现,正数和0没有改变
字节大小改变的只有负数。在这个例子中,byte数组转String以及string转byte数组都是采用的utf-8,默认是编码方式
接下来我们使用iso-8859-1的编码方式进行处理
public static void main(String[] args) {
byte[] bytes = new byte[] { 50, 0, -1, 28, -24 };
try {
//"ISO-8859-1"
String sendString=new String( bytes,"ISO-8859-1");
System.out.println(sendString);
byte[] Mybytes=sendString.getBytes("ISO-8859-1");
for (int i = 0; i <Mybytes.length ; i++) {
System.out.print(Mybytes[i]+" ");
}
} catch (Exception e) {
e.printStackTrace();
}
运行图例:

我们可以看出,我们这样的一系列操作之后,bytes数组的值没有发现改变,我们的目的也实现了。这也是我们在项目
开发中需要注意的问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库