在Java中将字节数组转换为字符串并返回后得到错误的结果
我有一系列处理字节数组的工作人员,但他们也必须接收字符串和字符数组并将其转换为工作方法work(@NotNull Object data, @NotNull Object prev)
。因此,我将一个worker中的字节数组转换为字符串nextWorker.work(new String(result, "UTF-16BE"),this);
,并将其转换为另一个worker in work方法,在该方法中,它将转换回字节数组if(data instanceof String){workingData = ((String)data).getBytes("UTF-16BE");}
,但在某些情况下,结果是错误的(我将byte arr size传递给N,然后将byte arr size传递给N-2或类似的内容,丢失的字节不是来自该数组的开头或结尾)。有谁能帮我解决这个问题,或者告诉我为什么会这样
byte[] result = new byte[]{0, 0, 0, 97, 63, -44, 55, -19, 51, 16, -39, -106, 0, 0, 0,
18, 0, 0, 0, 9, 0, 63, -32, 0, 0, 0, 0, 0, 0, 32, 63, -84,
113, -57, 28, 113, -57, 28, 114, 63, -84, 113, -57, 28, 113, -57, 28,
115, 63, -84, 113, -57, 28, 113, -57, 28, 100, 63,
-84, 113, -57, 28, 113, -57, 28, 117, 63, -84, 113, -57, 28, 113,
-57, 28, 108, 63, -84, 113, -57, 28, 113, -57, 28, 109, 63,
-84, 113, -57, 28, 113, -57, 28, 111, 63, -68, 113, -57, 28, 113, -57, 28, 0};
byte[] result2 = new byte[]{0, 0, 0, 115, 63, -29, -103, 75, 42, 114, -97, 67, 0, 0, 0, 18, 0,
0, 0, 11, -1, 63, -84, 113, -57, 28, 113, -57, 28, 0, 63, -36, 113, -57, 28, 113, -57, 28,
32, 63, -84, 113, -57, 28, 113, -57, 28, 112, 63, -84, 113, -57, 28, 113, -57, 28, -2, 63, -84,
113, -57, 28, 113, -57, 28, 114, 63, -84, 113, -57, 28, 113, -57, 28, 101, 63,
-84, 113, -57, 28, 113, -57, 28, 105, 63, -84, 113, -57, 28, 113, -57, 28, 76, 63,
-84, 113, -57, 28, 113, -57, 28, 109, 63, -84, 113, -57, 28, 113,
-57, 28, 111, 63, -84, 113, -57, 28, 113, -57, 28, 0};
try {
Object data = new String(result, "UTF-16BE");
byte[] workingData = ((String)data).getBytes("UTF-16BE");
Object data2 = new String(result2, "UTF-16BE");
byte[] workingData2 = ((String)data2).getBytes("UTF-16BE");
System.out.println( Arrays.equals(result,workingData));
System.out.println( Arrays.equals(result2,workingData2));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
# 1 楼答案
将编码从
UTF-16BE
更改为UTF-16LE
解决了给定示例中的问题是否有理由首选
UTF-16BE
编码