En realidad, la versión y la versión commons-codec
interna específica Sun está utilizando hacer dan los mismos resultados. Creo que pensó que le estaban dando diferentes versiones, ya que están llamando implícitamente toString()
en una serie cuando lo hace:
System.out.println(org.apache.commons.codec.binary.Base64.encodeBase64(baos.toByteArray()));
que es definitivamente no imprimir el contenido de la matriz. En cambio, eso solo imprimirá la dirección de la referencia del arreglo.
He escrito el siguiente programa para probar los codificadores uno contra el otro. Vas a ver desde la salida por debajo que el dar los mismos resultados:
import java.util.Random;
public class Base64Stuff
{
public static void main(String[] args) {
Random random = new Random();
byte[] randomBytes = new byte[32];
random.nextBytes(randomBytes);
String internalVersion = com.sun.org.apache.xerces.internal.impl.dv.util.Base64.encode(randomBytes);
byte[] apacheBytes = org.apache.commons.codec.binary.Base64.encodeBase64(randomBytes);
String fromApacheBytes = new String(apacheBytes);
System.out.println("Internal length = " + internalVersion.length());
System.out.println("Apache bytes len= " + fromApacheBytes.length());
System.out.println("Internal version = |" + internalVersion + "|");
System.out.println("Apache bytes = |" + fromApacheBytes + "|");
System.out.println("internal equal apache bytes?: " + internalVersion.equals(fromApacheBytes));
}
}
y aquí está la salida de una carrera de ella:
Internal length = 44
Apache bytes len= 44
Internal version = |Kf0JBpbxCfXutxjveYs8CXMsFpQYgkllcHHzJJsz9+g=|
Apache bytes = |Kf0JBpbxCfXutxjveYs8CXMsFpQYgkllcHHzJJsz9+g=|
internal equal apache bytes?: true
Qué clase 'Base64' en "lib del sol" está usted usando en tu primer ejemplo? – QuantumMechanic
com.sun.org.apache.xerces.internal.impl.dv.util.Base64 –