¿Por qué las longitudes son diferentes al convertir una matriz de bytes a una cadena y luego a una matriz de bytes?

Tengo el siguiente código de Java:

byte[] signatureBytes = getSignature(); String signatureString = new String(signatureBytes, "UTF8"); byte[] signatureStringBytes = signatureString.getBytes("UTF8"); System.out.println(signatureBytes.length == signatureStringBytes.length); // prints false 

P: Probablemente no lo entiendo bien, pero pensé que el new String(byte[] bytes, String charset) y String.getBytes(charset) son operaciones inversas.

P: Como seguimiento, ¿cuál es una forma segura de transportar una matriz de bytes [] como una cadena?