【发布时间】:2021-09-28 11:32:43
【问题描述】:
我有一个字节数组。我需要将带有分隔符的字符串连接到它。然后我想取回字节数组。在所有这些逻辑之后,输出字节数组不等于输入。在java中:
这在最后一行失败了:
@Test
void test1() {
byte[] initialBytes = RandomUtils.nextBytes(64);
String initialString = new String(initialBytes, StandardCharsets.UTF_8);
String concatenatedString = String.join("\t", "Pre", initialString);
byte[] concatenatedStringToBytes = concatenatedString.getBytes(StandardCharsets.UTF_8);
String concatenatedBytesBackToString = new String(concatenatedStringToBytes, StandardCharsets.UTF_8);
int indexOfDelimeter = concatenatedBytesBackToString.indexOf("\t");
String finalString = concatenatedBytesBackToString.substring(indexOfDelimeter + 1);
byte[] finalBytes = finalString.getBytes(StandardCharsets.UTF_8);
assertEquals(initialString, finalString);
assertTrue(Arrays.equals(initialBytes, finalBytes));
}
【问题讨论】:
-
两种可能。您的随机生成的字节不代表一个有效的
String,或者它们代表一个String,它有多个可能的UTF-8 表示。 -
Arrays.equals(initialBytes, finalBytes)是假的不是一个非常可能和有效的结果吗? -
@sarveshseri - 是的,但是对应于这些字节数组的字符串是相等的。所以我很困惑为什么 byte[] 不相等。
-
更改它以在两个字节数组不相等时转储它们并查看它们。
标签: java arrays string byte delimiter