java – 为什么在将字节数组转换为String然后再转换为字节数组时长度会有所不同?

我有以下 Java代码:

byte[] signatureBytes = getSignature();

String signatureString = new String(signatureBytes, "UTF8");
byte[] signatureStringBytes = signatureString.getBytes("UTF8");

System.out.println(signatureBytes.length == signatureStringBytes.length); // prints false

问:我可能误解了这一点,但我认为新的String(byte [] bytes,String charset)和String.getBytes(charset)是反向操作?

问:作为后续工作,将byte []数组作为String传输的安全方法是什么?

并非每个byte []都是有效的UTF-8.默认情况下,无效序列被固定字符替换,我认为这是长度变化的原因.

尝试使用Latin-1,它不应该发生,因为它是一个简单的编码,每个byte []都是有意义的.

对于Windows-1252都不应该发生.那里有未定义的序列(实际上是未定义的字节),但是所有的字符都在一个字节中编码.新字节[]可能与原始字节不同,但它们的长度必须相同.

相关文章
相关标签/搜索