您可以将一个字节存储在字符串中,但这不是一个好主意。您不能使用UTF-8,因为它会处理字节,但更快、更有效的方法是使用ISO-8859-1编码或纯8位。最简单的方法是使用。
String s1 = new String(data, 0);
或者
String s1 = new String(data, "ISO-8859-1");
来自维基百科上的UTF-8, 正如Jon Skeet所指出的,这些编码在标准下是无效的。在Java中,它们的行为各不相同。DataInputStream在前三个版本中将它们视为相同的,而在接下来的两个版本中会抛出异常。字符集解码器会默默地将它们视为单独的字符。
00000000 is \0
11000000 10000000 is \0
11100000 10000000 10000000 is \0
11110000 10000000 10000000 10000000 is \0
11111000 10000000 10000000 10000000 10000000 is \0
11111100 10000000 10000000 10000000 10000000 10000000 is \0
这意味着如果您在字符串中看到\0,您无法确定原始byte[]值是什么。 DataOutputStream使用第二个选项来与C兼容,因为C将\0视为终止符。
BTW,DataOutputStream不知道代码点,因此会使用UTF-16编码高代码点字符,然后使用UTF-8编码。
0xFE和0xFF不能出现在字符中。 0x11000000+的值只能出现在字符的开头,而不能出现在多字节字符内部。
java.lang.String
吗?为什么不能直接处理字节序列呢? - Ray Toal